// source --> https://bateaulerivegauche.fr/wp-content/themes/uncode/library/js/init.js /** * Load utils - BEGIN */ /* CSS Browser Selector 1.0 Originally written by Rafael Lima (http://rafael.adm.br) http://rafael.adm.br/css_browser_selector License: http://creativecommons.org/licenses/by/2.5/ Co-maintained by: https://github.com/ridjohansen/css_browser_selector https://github.com/wbruno/css_browser_selector */ "use strict"; window.requestAnimFrame = (function() { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(/* function */ callback, /* DOMElement */ element){ window.setTimeout(callback, 1000 / 60); }; })(); window.requestTimeout = function(fn, delay) { if( !window.requestAnimationFrame && !window.webkitRequestAnimationFrame && !(window.mozRequestAnimationFrame && window.mozCancelRequestAnimationFrame) && // Firefox 5 ships without cancel support !window.oRequestAnimationFrame && !window.msRequestAnimationFrame) return window.setTimeout(fn, delay); var start = new Date().getTime(), handle = new Object(); function loop(){ var current = new Date().getTime(), delta = current - start; delta >= delay ? fn.call() : handle.value = requestAnimFrame(loop); }; handle.value = requestAnimFrame(loop); return handle; }; window.clearRequestTimeout = function(handle) { if ( typeof handle !== 'undefined' ) { window.cancelAnimationFrame ? window.cancelAnimationFrame(handle.value) : window.webkitCancelAnimationFrame ? window.webkitCancelAnimationFrame(handle.value) : window.webkitCancelRequestAnimationFrame ? window.webkitCancelRequestAnimationFrame(handle.value) : /* Support for legacy API */ window.mozCancelRequestAnimationFrame ? window.mozCancelRequestAnimationFrame(handle.value) : window.oCancelRequestAnimationFrame ? window.oCancelRequestAnimationFrame(handle.value) : window.msCancelRequestAnimationFrame ? window.msCancelRequestAnimationFrame(handle.value) : clearTimeout(handle); } }; var uaInfo = { ua: '', is: function(t) { return RegExp(t, "i").test(uaInfo.ua); }, version: function(p, n) { n = n.replace(".", "_"); var i = n.indexOf('_'), ver = ""; while (i > 0) { ver += " " + p + n.substring(0, i); i = n.indexOf('_', i + 1); } ver += " " + p + n; return ver; }, getBrowser: function() { var g = 'gecko', w = 'webkit', c = 'chrome', f = 'firefox', s = 'safari', o = 'opera', a = 'android', bb = 'blackberry', dv = 'device_', ua = uaInfo.ua, is = uaInfo.is; return [ (!(/opera|webtv/i.test(ua)) && /msie\s(\d+)/.test(ua)) ? ('ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1)) : is('edge\/') ? 'edge ie' + (/edge\/(\d+)\.(\d+)/.test(ua) ? RegExp.$1 + ' ie' + RegExp.$1 + '_' + RegExp.$2 : '') // IE Edge : is('trident\/') ? 'ie ie'+ (/trident\/.+rv:(\d+)/i.test(ua) ? RegExp.$1 : '') //ie11+ : is('firefox/') ? g + " " + f + (/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + f + RegExp.$2 + ' ' + f + RegExp.$2 + "_" + RegExp.$4 : '') : is('gecko/') ? g : is('opera') ? o + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + "_" + RegExp.$4 : (/opera(\s|\/)(\d+)\.(\d+)/.test(ua) ? ' ' + o + RegExp.$2 + " " + o + RegExp.$2 + "_" + RegExp.$3 : '')) : is('konqueror') ? 'konqueror' : is('blackberry') ? (bb + (/Version\/(\d+)(\.(\d+)+)/i.test(ua) ? " " + bb + RegExp.$1 + " " + bb + RegExp.$1 + RegExp.$2.replace('.', '_') : (/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) ? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '') : ''))) // blackberry : is('android') ? (a + (/Version\/(\d+)(\.(\d+))+/i.test(ua) ? " " + a + RegExp.$1 + " " + a + RegExp.$1 + RegExp.$2.replace('.', '_') : '') + (/Android (.+); (.+) Build/i.test(ua) ? ' ' + dv + ((RegExp.$2).replace(/ /g, "_")).replace(/-/g, "_") : '')) //android : is('chrome') ? w + ' ' + c + (/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + c + RegExp.$2 + ((RegExp.$4 > 0) ? ' ' + c + RegExp.$2 + "_" + RegExp.$4 : '') : '') : is('iron') ? w + ' iron' : is('applewebkit/') ? (w + ' ' + s + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + s + RegExp.$2 + " " + s + RegExp.$2 + RegExp.$3.replace('.', '_') : (/ Safari\/(\d+)/i.test(ua) ? ((RegExp.$1 == "419" || RegExp.$1 == "417" || RegExp.$1 == "416" || RegExp.$1 == "412") ? ' ' + s + '2_0' : RegExp.$1 == "312" ? ' ' + s + '1_3' : RegExp.$1 == "125" ? ' ' + s + '1_2' : RegExp.$1 == "85" ? ' ' + s + '1_0' : '') : ''))) //applewebkit : is('mozilla/') ? g : '' ]; }, getPlatform : function() { var wp = 'winphone', a = 'android', bb = 'blackberry', dv = 'device_', ua = uaInfo.ua, version = uaInfo.version, is = uaInfo.is; return [ is('j2me') ? 'j2me' :is('windows phone') ? (wp + (/Windows Phone (\d+)(\.(\d+))+/i.test(ua) ? " " + wp + RegExp.$1 + " " + wp + RegExp.$1 + RegExp.$2.replace('.', '_') : (/Windows Phone OS (\d+)(\.(\d+))+/i.test(ua) ? " " + wp + RegExp.$1 + " " + wp + RegExp.$1 + RegExp.$2.replace('.', '_') : ''))) // Windows Phone :is('blackberry') ? (bb + (/Version\/(\d+)(\.(\d+)+)/i.test(ua) ? " " + bb + RegExp.$1 + " " + bb + RegExp.$1 + RegExp.$2.replace('.', '_') : (/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) ? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '') : ''))) // blackberry :is('android') ? (a + (/Version\/(\d+)(\.(\d+))+/i.test(ua) ? " " + a + RegExp.$1 + " " + a + RegExp.$1 + RegExp.$2.replace('.', '_') : '') + (/Android (.+); (.+) Build/i.test(ua) ? ' ' + dv + ((RegExp.$2).replace(/ /g, "_")).replace(/-/g, "_") : '')) //android :is('ipad|ipod|iphone') ? ( (/CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ? 'ios' + version('ios', RegExp.$2) : '') + ' ' + (/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : "")) //'iphone' //:is('ipod')?'ipod' //:is('ipad')?'ipad' :is('playbook') ? 'playbook' :is('kindle|silk') ? 'kindle' :is('playbook') ? 'playbook' :is('mac') ? 'mac' + (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? (' mac' + (RegExp.$2) + ' mac' + (RegExp.$1).replace('.', "_")) : '') :is('win') ? 'win' + (is('windows nt 10.0') ? ' win10' :is('windows nt 6.3') ? ' win8_1' :is('windows nt 6.2') ? ' win8' :is('windows nt 6.1') ? ' win7' :is('windows nt 6.0') ? ' vista' :is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp' :is('windows nt 5.0') ? ' win_2k' :is('windows nt 4.0') || is('WinNT4.0') ? ' win_nt' : '') :is('freebsd') ? 'freebsd' :is('x11|linux') ? 'linux' : '' ]; }, getMobile: function() { var is = uaInfo.is; return [ is("android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk") ? 'mobile' : '' ]; }, getIpadApp: function() { var is = uaInfo.is; return [ (is('ipad|iphone|ipod') && !is('safari')) ? 'ipad_app' : '' ]; }, getLang: function() { var ua = uaInfo.ua; return [/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua) ? ('lang_' + RegExp.$2).replace("-", "_") + (RegExp.$3 != '' ? (' ' + 'lang_' + RegExp.$1).replace("-", "_") : '') : '']; } } var screenInfo = { width: (window.outerWidth || document.documentElement.clientWidth) - 15, height: window.outerHeight || document.documentElement.clientHeight, screens: [0, 768, 980, 1200], screenSize: function() { screenInfo.width = (window.outerWidth || document.documentElement.clientWidth) - 15; screenInfo.height = window.outerHeight || document.documentElement.clientHeight; var screens = screenInfo.screens, i = screens.length, arr = [], maxw, minw; while (i--) { if (screenInfo.width >= screens[i]) { if (i) { arr.push("minw_" + screens[(i)]); } if (i <= 2) { arr.push("maxw_" + (screens[(i) + 1] - 1)); } break; } } return arr; }, getOrientation: function() { return screenInfo.width < screenInfo.height ? ["orientation_portrait"] : ["orientation_landscape"]; }, getInfo: function() { var arr = []; arr = arr.concat(screenInfo.screenSize()); arr = arr.concat(screenInfo.getOrientation()); return arr; }, getPixelRatio: function() { var arr = [], pixelRatio = window.devicePixelRatio ? window.devicePixelRatio : 1; if (pixelRatio > 1) { arr.push('retina_' + parseInt(pixelRatio) + 'x'); arr.push('hidpi'); } else { arr.push('no-hidpi'); } return arr; } } var dataUriInfo = { data: new Image(), div: document.createElement("div"), isIeLessThan9: false, getImg: function() { dataUriInfo.data.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="; dataUriInfo.div.innerHTML = ""; dataUriInfo.isIeLessThan9 = dataUriInfo.div.getElementsByTagName("i").length == 1; return dataUriInfo.data; }, checkSupport: function() { if (dataUriInfo.data.width != 1 || dataUriInfo.data.height != 1 || dataUriInfo.isIeLessThan9) { return ["no-datauri"]; } else { return ["datauri"]; } } } function css_browser_selector(u, ns) { var html = document.documentElement, b = [] ns = ns ? ns : ""; /* ua */ uaInfo.ua = u.toLowerCase(); var browser = uaInfo.getBrowser(); if (browser == 'gecko') browser = (!(window.ActiveXObject) && "ActiveXObject" in window) ? 'ie ie11' : browser; var pattTouch = /no-touch/g; if (pattTouch.test(html.className)) b = b.concat('no-touch'); else b = b.concat('touch'); var pattAdmin = /admin-mode/g; if (pattAdmin.test(html.className)) b = b.concat('admin-mode'); b = b.concat(browser); b = b.concat(uaInfo.getPlatform()); b = b.concat(uaInfo.getMobile()); b = b.concat(uaInfo.getIpadApp()); b = b.concat(uaInfo.getLang()); /* js */ b = b.concat(['js']); /* pixel ratio */ b = b.concat(screenInfo.getPixelRatio()); /* screen */ b = b.concat(screenInfo.getInfo()); var updateScreen = function() { html.className = html.className.replace(/ ?orientation_\w+/g, "").replace(/ [min|max|cl]+[w|h]_\d+/g, ""); html.className = html.className + ' ' + screenInfo.getInfo().join(' '); } window.addEventListener('resize', updateScreen); window.addEventListener('orientationchange', updateScreen); /* dataURI */ var data = dataUriInfo.getImg(); data.onload = data.onerror = function() { html.className += ' ' + dataUriInfo.checkSupport().join(' '); } /* removendo itens invalidos do array */ b = b.filter(function(e) { return e; }); /* prefixo do namespace */ b[0] = ns ? ns + b[0] : b[0]; html.className = b.join(' ' + ns); return html.className; } // define css_browser_selector_ns before loading this script to assign a namespace var css_browser_selector_ns = css_browser_selector_ns || ""; // init css_browser_selector(navigator.userAgent, css_browser_selector_ns); /** * skip-link-focus-fix.js * * Helps with accessibility for keyboard only users. * * Learn more: https://github.com/Automattic/_s/pull/136 */ (function() { var is_webkit = navigator.userAgent.toLowerCase().indexOf('webkit') > -1, is_opera = navigator.userAgent.toLowerCase().indexOf('opera') > -1, is_ie = navigator.userAgent.toLowerCase().indexOf('msie') > -1; if ((is_webkit || is_opera || is_ie) && document.getElementById && window.addEventListener) { window.addEventListener('hashchange', function() { var id = location.hash.substring(1), element; if (!(/^[A-z0-9_-]+$/.test(id))) { return; } element = document.getElementById(id); if (element) { if (!(/^(?:a|select|input|button|textarea)$/i.test(element.tagName))) { element.tabIndex = -1; } element.focus(); } }, false); } })(); // Polyfill for creating CustomEvents on IE9/10/11 // code pulled from: // https://github.com/d4tocchini/customevent-polyfill // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill try { new CustomEvent("test"); } catch (e) { var CustomEvent = function(event, params) { var evt; params = params || { bubbles: false, cancelable: false, detail: undefined }; evt = document.createEvent("CustomEvent"); evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); return evt; }; CustomEvent.prototype = window.Event.prototype; window.CustomEvent = CustomEvent; // expose definition to window } // Evento - v1.0.0 // by Erik Royall (http://erikroyall.github.io) // Dual licensed under MIT and GPL // Array.prototype.indexOf shim // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf Array.prototype.indexOf || (Array.prototype.indexOf = function(n) { "use strict"; if (null == this) throw new TypeError; var t, e, o = Object(this), r = o.length >>> 0; if (0 === r) return -1; if (t = 0, arguments.length > 1 && (t = Number(arguments[1]), t != t ? t = 0 : 0 != t && 1 / 0 != t && t != -1 / 0 && (t = (t > 0 || -1) * Math.floor(Math.abs(t)))), t >= r) return -1; for (e = t >= 0 ? t : Math.max(r - Math.abs(t), 0); r > e; e++) if (e in o && o[e] === n) return e; return -1 }); var evento = function(n) { var t, e, o, r = n, i = r.document, f = {}; return t = function() { return "function" == typeof i.addEventListener ? function(n, t, e) { n.addEventListener(t, e, !1), f[n] = f[n] || {}, f[n][t] = f[n][t] || [], f[n][t].push(e) } : "function" == typeof i.attachEvent ? function(n, t, e) { n.attachEvent(t, e), f[n] = f[n] || {}, f[n][t] = f[n][t] || [], f[n][t].push(e) } : function(n, t, e) { n["on" + t] = e, f[n] = f[n] || {}, f[n][t] = f[n][t] || [], f[n][t].push(e) } }(), e = function() { return "function" == typeof i.removeEventListener ? function(n, t, e) { n.removeEventListener(t, e, !1), Helio.each(f[n][t], function(o) { o === e && (f[n] = f[n] || {}, f[n][t] = f[n][t] || [], f[n][t][f[n][t].indexOf(o)] = void 0) }) } : "function" == typeof i.detachEvent ? function(n, t, e) { n.detachEvent(t, e), Helio.each(f[n][t], function(o) { o === e && (f[n] = f[n] || {}, f[n][t] = f[n][t] || [], f[n][t][f[n][t].indexOf(o)] = void 0) }) } : function(n, t, e) { n["on" + t] = void 0, Helio.each(f[n][t], function(o) { o === e && (f[n] = f[n] || {}, f[n][t] = f[n][t] || [], f[n][t][f[n][t].indexOf(o)] = void 0) }) } }(), o = function(n, t) { f[n] = f[n] || {}, f[n][t] = f[n][t] || []; for (var e = 0, o = f[n][t].length; o > e; e += 1) f[n][t][e]() }, { add: t, remove: e, trigger: o, _handlers: f } }(this); /* * OKVideo by OKFocus v2.3.2 * http://okfoc.us * * Copyright 2014, OKFocus * Licensed under the MIT license. * */ var player, OKEvents, options, videoWidth, videoHeight, YTplayers, youtubePlayers = new Array(); // youtube player ready function onYouTubeIframeAPIReady() { YTplayers = new Array(); jQuery('.no-touch .uncode-video-container.video').each(function() { var playerY; if (jQuery(this).attr('data-provider') == 'youtube') { var id = jQuery(this).attr('data-id'); options = jQuery(window).data('okoptions-' + id); options.time = jQuery(this).attr('data-t'); playerY = new YT.Player('okplayer-' + id, { videoId: options.video ? options.video.id : null, playerVars: { 'autohide': 1, 'autoplay': 0, //options.autoplay, 'disablekb': options.keyControls, 'cc_load_policy': options.captions, 'controls': options.controls, 'enablejsapi': 1, 'fs': 0, 'modestbranding': 1, 'origin': window.location.origin || (window.location.protocol + '//' + window.location.hostname), 'iv_load_policy': options.annotations, 'loop': options.loop, 'showinfo': 0, 'rel': 0, 'wmode': 'opaque', 'hd': options.hd, 'mute': 1 }, events: { 'onReady': OKEvents.yt.ready, 'onStateChange': OKEvents.yt.onStateChange, 'onError': OKEvents.yt.error } }); YTplayers[id] = playerY; playerY.videoId = id; } }); } // vimeo player ready function vimeoPlayerReady(id) { options = jQuery(window).data('okoptions-' + id); var jIframe = options.jobject, iframe = jIframe[0]; jIframe.attr('src', jIframe.data('src')); var playerV = $f(iframe); // hide player until Vimeo hides controls... playerV.addEvent('ready', function(e) { OKEvents.v.onReady(iframe); var carouselContainer = jQuery(iframe).closest('.owl-carousel'); if (carouselContainer.length) { UNCODE.owlPlayVideo(carouselContainer); } // "Do not try to add listeners or call functions before receiving this event." if (OKEvents.utils.isMobile()) { // mobile devices cannot listen for play event OKEvents.v.onPlay(playerV); } else { playerV.addEvent('play', OKEvents.v.onPlay(playerV)); playerV.addEvent('pause', OKEvents.v.onPause); playerV.addEvent('finish', OKEvents.v.onFinish); } if (options.time != null) { playerV.api('seekTo', (options.time).replace('t=', '')); } playerV.api('play'); jQuery(iframe).css({ visibility: 'visible', opacity: 1 }); jQuery(iframe).closest('.uncode-video-container').css('opacity', '1'); jQuery(iframe).closest('#page-header').addClass('video-started'); jQuery(iframe).closest('.background-wrapper').find('.block-bg-blend-mode.not-ie').css('opacity', '1'); }); } OKEvents = { yt: { ready: function(event) { var id = event.target.videoId; youtubePlayers[id] = event.target; event.target.setVolume(options.volume); if (options.autoplay === 1) { if (options.playlist.list) { player.loadPlaylist(options.playlist.list, options.playlist.index, options.playlist.startSeconds, options.playlist.suggestedQuality); } else { var inCarousel = jQuery('#okplayer-' + id).closest('.owl-item'); if (!inCarousel.length || (inCarousel.length && inCarousel.hasClass('active'))) { if (options.time != null) { event.target.seekTo(parseInt(options.time)); } event.target.playVideo(); } else { event.target.pauseVideo(); } } } OKEvents.utils.isFunction(options.onReady) && options.onReady(event.target); }, onStateChange: function(event) { var id = event.target.videoId; switch (event.data) { case -1: OKEvents.utils.isFunction(options.unstarted) && options.unstarted(); break; case 0: OKEvents.utils.isFunction(options.onFinished) && options.onFinished(); options.loop && event.target.playVideo(); break; case 1: OKEvents.utils.isFunction(options.onPlay) && options.onPlay(); setTimeout(function() { UNCODE.initVideoComponent(document.body, '.uncode-video-container.video, .uncode-video-container.self-video'); jQuery('#okplayer-' + id).closest('.uncode-video-container').css('opacity', '1'); jQuery('#okplayer-' + id).closest('#page-header').addClass('video-started'); jQuery('#okplayer-' + id).closest('.background-wrapper').find('.block-bg-blend-mode.not-ie').css('opacity', '1'); }, 300); break; case 2: OKEvents.utils.isFunction(options.onPause) && options.onPause(); break; case 3: OKEvents.utils.isFunction(options.buffering) && options.buffering(); break; case 5: OKEvents.utils.isFunction(options.cued) && options.cued(); break; default: throw "OKVideo: received invalid data from YT player."; } }, error: function(event) { throw event; } }, v: { onReady: function(target) { OKEvents.utils.isFunction(options.onReady) && options.onReady(target); }, onPlay: function(player) { if (!OKEvents.utils.isMobile()) player.api('setVolume', options.volume); OKEvents.utils.isFunction(options.onPlay) && options.onPlay(); jQuery(player.element).closest('.uncode-video-container').css('opacity', '1'); jQuery(player.element).closest('#page-header').addClass('video-started'); jQuery(player.element).closest('.background-wrapper').find('.block-bg-blend-mode.not-ie').css('opacity', '1'); }, onPause: function() { OKEvents.utils.isFunction(options.onPause) && options.onPause(); }, onFinish: function() { OKEvents.utils.isFunction(options.onFinish) && options.onFinish(); } }, utils: { isFunction: function(func) { if (typeof func === 'function') { return true; } else { return false; } }, isMobile: function() { if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) { return true; } else { return false; } } } }; // DOM class helper (function(window) { 'use strict'; // class helper functions from bonzo https://github.com/ded/bonzo function classReg(className) { return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); } // classList support for class management // altho to be fair, the api sucks because it won't accept multiple classes at once var hasClass, addClass, removeClass; if ('classList' in document.documentElement) { hasClass = function(elem, c) { if ( elem !== null && typeof elem.classList !== 'undefined' ) return elem.classList.contains(c); }; addClass = function(elem, c) { if ( elem !== null && typeof elem.classList !== 'undefined' ) elem.classList.add(c); }; removeClass = function(elem, c) { if ( elem !== null && typeof elem.classList !== 'undefined' ) elem.classList.remove(c); }; } else { hasClass = function(elem, c) { if (elem !== null) return classReg(c).test(elem.className); }; addClass = function(elem, c) { if (!hasClass(elem, c)) { if (elem !== null) elem.className = elem.className + ' ' + c; } }; removeClass = function(elem, c) { if (elem !== null) elem.className = elem.className.replace(classReg(c), ' '); }; } function toggleClass(elem, c) { var fn = hasClass(elem, c) ? removeClass : addClass; fn(elem, c); } var classie = { // full names hasClass: hasClass, addClass: addClass, removeClass: removeClass, toggleClass: toggleClass, // short names has: hasClass, add: addClass, remove: removeClass, toggle: toggleClass }; // transport if (typeof define === 'function' && define.amd) { // AMD define(classie); } else { // browser global window.classie = classie; } window.wrap = function(wrapper, elms) { if (!elms.length) { elms = [elms]; } for (var i = elms.length - 1; i >= 0; i--) { var child = (i > 0) ? wrapper.cloneNode(true) : wrapper; var el = elms[i]; var parent = el.parentNode; var sibling = el.nextSibling; child.appendChild(el); if (sibling) { parent.insertBefore(child, sibling); } else { parent.appendChild(child); } } }; window.wrapAll = function(wrapper, nodes) { var parent = nodes[0].parentNode; var previousSibling = nodes[0].previousSibling; for (var i = 0; nodes.length - i; wrapper.firstChild === nodes[0] && i++) { wrapper.appendChild(nodes[i]); } var nextSibling = previousSibling ? previousSibling.nextSibling : parent.firstChild; parent.insertBefore(wrapper, nextSibling); return wrapper; }; })(window); /* From Modernizr */ function whichTransitionEvent() { var t; var el = document.createElement('fakeelement'); var transitions = { 'transition': 'transitionend', 'OTransition': 'oTransitionEnd', 'MozTransition': 'transitionend', 'WebkitTransition': 'webkitTransitionEnd' } for (t in transitions) { if (el.style[t] !== undefined) { return transitions[t]; } } } function whichAnimationEvent() { var t; var el = document.createElement('fakeelement'); var animations = { 'animation': 'animationend', 'OAnimation': 'oAnimationEnd', 'MozAnimation': 'animationend', 'WebkitAnimation': 'webkitAnimationEnd' } for (t in animations) { if (el.style[t] !== undefined) { return animations[t]; } } } /** * Load utils - END */ /** * Start main js */ (function(window, undefined) { 'use strict'; // Init variables var bodyTop, scrollbarWidth = false, noScroll = false, boxEvent = new CustomEvent('boxResized'), menuClose = new CustomEvent('menuClose'), menuOpen = new CustomEvent('menuOpen'), bodyBorder = 0, adminBarHeight = 0, boxWidth = 0, boxLeft = 0, parallaxRows, parallaxCols, parallaxHeaders, kenburnsHeaders, kenburnsRows, kenburnsCols, backwashHeaders, backwashRows, backwashCols, visibleRows, headerWithOpacity, speedDivider = SiteParameters.parallax_factor, adminBar, pageHeader, headerVideo, masthead, mastheadMobile, mastheadMobilePaddingTop = 0, maincontainer, menuwrapper, menuhide, menusticky, menuHeight = 0, menuMobileHeight = 0, mainmenu = new Array(), secmenu = new Array(), secmenuHeight = 0, transmenuHeight = 0, header, transmenuel, logo, logoel, logolink, logoMinScale, lastScrollValue = 0, wwidth = window.innerWidth || document.documentElement.clientWidth, wheight = window.innerHeight || document.documentElement.clientHeight, isScrolling = false, boxWrapper, docheight = 0, isMobile = classie.hasClass(document.documentElement, 'touch') ? true : false, isIE = classie.hasClass(document.documentElement, 'ie') || classie.hasClass(document.documentElement, 'opera12') ? true : false, isFF = classie.hasClass(document.documentElement, 'firefox') ? true : false, isFullPage, isFullPageSnap, isFrontEndEditor, transitionEvent = whichTransitionEvent(), animationEvent = whichAnimationEvent(), footerScroller = false, mediaQuery = 959, mediaQueryMobile = 569, menuOpened = false, overlayOpened = false, menuMobileTriggerEvent = new CustomEvent('menuMobileTrigged'), resizeTimer_, resizeTimer, hidingTimer, isSplitMenu = false, mainNavMenu, mainNavWrapper, isMobileTransparent = false, isMobileParallaxAllowed = SiteParameters.mobile_parallax_allowed, loadedFonts = new Array(), already_font = false, scrollRowHeight_fix = window.pageYOffset, checkVisible = function( elm ) { var rect = elm.getBoundingClientRect(); var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight); return !(rect.bottom < 0 || rect.top - viewHeight >= 0); }, initBox = function() { var bodyBorderDiv = document.querySelectorAll('.body-borders .top-border'); if (bodyBorderDiv.length) { bodyBorder = outerHeight(bodyBorderDiv[0]); } else bodyBorder = 0; UNCODE.isRTL = classie.hasClass(document.body, 'rtl') ? true : false, UNCODE.bodyBorder = bodyBorder; UNCODE.isFrontEndEditor = classie.hasClass(document.body, 'compose-mode') && classie.hasClass(document.body, 'vc_editor'); UNCODE.isFullPage = !UNCODE.isFrontEndEditor && classie.hasClass(document.body, 'uncode-fullpage-slide') && !( UNCODE.isMobile && classie.hasClass(document.body, 'uncode-fp-mobile-disable') && window.innerWidth < 570 ); UNCODE.isFullPageSnap = !UNCODE.isFrontEndEditor && classie.hasClass(document.body, 'uncode-scroll-snap'); if (bodyBorder != 0) { if ( !UNCODE.isFullPage ) { document.documentElement.style.paddingTop = bodyBorder + 'px'; } wheight = (window.innerHeight || document.documentElement.clientHeight) - (bodyBorder * 2); } if (!isMobile && !scrollbarWidth) { // Create the measurement node var scrollDiv = document.createElement("div"); scrollDiv.className = "scrollbar-measure"; var dombody = document.body; if (dombody != null) { dombody.appendChild(scrollDiv); // Get the scrollbar width scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; // Delete the DIV dombody.removeChild(scrollDiv); } } if (!isMobile) { forEachElement('.box-container', function(el, i) { if (!classie.hasClass(el, 'limit-width')) { var elWidth = outerWidth(el), newWidth = 12 * Math.ceil((wwidth - scrollbarWidth) / 12); boxWidth = newWidth - (bodyBorder * 2); boxLeft = (wwidth - boxWidth - scrollbarWidth) / 2; el.style.width = boxWidth + 'px'; if ( UNCODE.isRTL ) el.style.marginRight = boxLeft + 'px'; else el.style.marginLeft = boxLeft + 'px'; if (mainmenu != undefined && mainmenu[0] != undefined) { mainmenu[0].style.width = boxWidth + 'px'; } } }); } if (classie.hasClass(document.body, 'menu-mobile-transparent')) isMobileTransparent = true; if (!isMobileTransparent) { if (wwidth > mediaQuery && classie.hasClass(document.body, 'menu-force-opacity')) classie.removeClass(document.body, 'menu-force-opacity'); if (wwidth < mediaQuery && !classie.hasClass(document.body, 'menu-force-opacity')) classie.addClass(document.body, 'menu-force-opacity'); } }, fixMenuHeight = function() { if (!classie.hasClass(document.body, 'vmenu')) noScroll = true; menuwrapper = document.querySelectorAll(".menu-wrapper"); masthead = document.getElementById("masthead"); if (classie.hasClass(document.body, 'hmenu-center-split')) { mastheadMobile = new Array(document.getElementById("logo-container-mobile"), document.getElementById("main-logo").parentNode); } else mastheadMobile = document.getElementById("logo-container-mobile"); menuhide = document.querySelector('#masthead .menu-hide, .main-header .menu-hide, #masthead .menu-hide-vertical'); menusticky = document.querySelectorAll('.menu-sticky, .menu-sticky-vertical'); transmenuel = document.querySelectorAll('.menu-transparent:not(.vmenu-container)'); var menuItemsButton = document.querySelectorAll('.menu-item-button .menu-btn-table'); logo = document.querySelector('#main-logo'); if (logo != undefined) logolink = (logo.firstElementChild || logo.firstChild); if (logolink != undefined) logoMinScale = logolink.getAttribute("data-minheight"); logoel = document.querySelectorAll('.menu-shrink .logo-container'); mainmenu = document.querySelectorAll('.vmenu .vmenu-container, .menu-primary .menu-container'); if (classie.hasClass(document.body, 'hmenu-center')) { var mainmenucenter = document.querySelectorAll('.hmenu-center .menu-container-mobile'); var first_array = Array.prototype.slice.call(mainmenu); var second_array = Array.prototype.slice.call(mainmenucenter); mainmenu = first_array.concat(second_array); } secmenu = document.querySelectorAll('.menu-secondary'); calculateMenuHeight(true); for (var k = 0; k < menuItemsButton.length; k++) { var a_item = menuItemsButton[k].parentNode, buttonHeight = outerHeight(menuItemsButton[k]); a_item.style.height = buttonHeight + 'px'; } if (classie.hasClass(document.body, 'hmenu-center-split')) { mainNavMenu = document.querySelector('#masthead .navbar-main .menu-primary-inner'); mainNavWrapper = document.querySelector('#masthead > .menu-container'); isSplitMenu = true; } fixMenu(); }, calculateMenuHeight = function(first) { menuHeight = transmenuHeight = secmenuHeight = 0; if (mastheadMobile != null) { if (mastheadMobile.length === 2) { if (wwidth > mediaQuery) { UNCODE.menuMobileHeight = outerHeight(mastheadMobile[1]); mastheadMobilePaddingTop = parseFloat(getComputedStyle(mastheadMobile[1]).paddingTop); } else { UNCODE.menuMobileHeight = outerHeight(mastheadMobile[0]); mastheadMobilePaddingTop = parseFloat(getComputedStyle(mastheadMobile[0]).paddingTop); } } else { UNCODE.menuMobileHeight = outerHeight(mastheadMobile); mastheadMobilePaddingTop = parseFloat(getComputedStyle(mastheadMobile).paddingTop); } } if (wwidth > mediaQuery) { for (var i = 0; i < mainmenu.length; i++) { if (classie.hasClass(document.body, 'hmenu-center') && i === 1) continue; if (!classie.hasClass(masthead, 'masthead-vertical')) { menuHeight = menuHeight + outerHeight(mainmenu[i]); } else menuHeight = 0; if (isIE && first) { getDivChildren(mainmenu[i], '.menu-horizontal-inner', function(innerMenu, i) { innerMenu.style.height = menuHeight + 'px'; }); } if (classie.hasClass(mainmenu[i].parentNode, 'menu-transparent')) { transmenuHeight += menuHeight; } } for (var j = 0; j < secmenu.length; j++) { secmenuHeight += outerHeight(secmenu[j]); } menuHeight += secmenuHeight; } else { menuHeight = UNCODE.menuMobileHeight; if (isMobileTransparent) { for (var i = 0; i < mainmenu.length; i++) { if (classie.hasClass(mainmenu[i].parentNode, 'menu-transparent')) { transmenuHeight += menuHeight; } } } var search_box = document.querySelectorAll('.search-icon .drop-menu'); for (var i = 0; i < search_box.length; i++) { search_box[i].removeAttribute('style'); } } if (classie.hasClass(document.documentElement, 'admin-mode')) { adminBar = document.getElementById("wpadminbar"); if (wwidth > 600) { if (adminBar != null) adminBarHeight = outerHeight(adminBar); else { if (wwidth > 782) adminBarHeight = 32; else adminBarHeight = 46; } } else adminBarHeight = 0; } UNCODE.adminBarHeight = adminBarHeight; UNCODE.menuHeight = menuHeight; if ( UNCODE.isFullPage && ! UNCODE.isFrontEndEditor ) { if ( UNCODE.adminBarHeight > 0 ) document.body.style.marginTop = ( ( UNCODE.adminBarHeight + UNCODE.bodyBorder ) * -1 ) + 'px'; document.body.style.paddingTop = ( UNCODE.adminBarHeight + UNCODE.bodyBorder ) + 'px'; } else { document.body.style.marginTop = 0; document.body.style.paddingTop = 0; } if (masthead != undefined) { //masthead.parentNode.style.height = menuHeight + 'px'; if (classie.hasClass(masthead, 'menu-transparent')) { if (wwidth > mediaQuery) masthead.parentNode.style.height = '0px'; } } if (typeof menuhide == 'object' && menuhide != null && mainmenu[0] != undefined) { var sticky_element = (typeof mainmenu.item === 'undefined' ? ((wwidth > mediaQuery) ? mainmenu[0] : mainmenu[1]) : mainmenu[0]); if (sticky_element.style.top != '') { sticky_element.style.top = UNCODE.bodyBorder + 'px' } } }, centerSplitMenu = function() { if (wwidth > mediaQuery && mainNavMenu) { if (mainNavMenu.style.left == '') { mainNavMenu.style.left = '0px'; var logoPos = logo.parentNode.getBoundingClientRect(); mainNavMenu.style.left = (wwidth / 2) - (logoPos.left + (logoPos.width / 2) ) + 'px'; mainNavWrapper.style.opacity = '1'; } mainNavWrapper.style.opacity = '1'; } }, initHeader = function() { UNCODE.adaptive(); headerHeight('.header-wrapper'); parallaxHeaders = document.querySelectorAll('.header-parallax > .header-bg-wrapper'); header = document.querySelectorAll('.header-wrapper.header-uncode-block, .header-wrapper.header-revslider, .header-wrapper.header-layerslider, .header-basic .header-wrapper, .header-uncode-block > .row-container:first-child > .row > .row-inner > .col-lg-12 > .uncol, .header-uncode-block .uncode-slider .owl-carousel > .row-container:first-child .column_child .uncoltable'); headerWithOpacity = document.querySelectorAll('.header-scroll-opacity'); pageHeader = document.getElementById("page-header"); if ( typeof pageHeader === 'object' && pageHeader !== null ) { headerVideo = pageHeader.querySelectorAll('.uncode-video-container'); kenburnsHeaders = pageHeader.querySelectorAll('.with-kburns > .header-bg-wrapper'); backwashHeaders = pageHeader.querySelectorAll('.with-zoomout > .header-bg-wrapper'); if ( headerVideo.length ) { classie.addClass(pageHeader, 'has-video'); } } if (pageHeader != undefined) { var backs = pageHeader.querySelectorAll('.header-bg'), backsCarousel = pageHeader.querySelectorAll('.header-uncode-block .background-inner'), uri_pattern = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig; if (backs.length == 0 && backsCarousel.length == 0) { pageHeader.setAttribute('data-imgready', 'true'); } else { if (backsCarousel.length) { for (var j = 0; j < backsCarousel.length; j++) { if (j == 0) { if (!!backsCarousel[j].style.backgroundImage && backsCarousel[j].style.backgroundImage !== void 0) { var url = (backsCarousel[j].style.backgroundImage).match(uri_pattern), image = new Image(); image.onload = function() { pageHeader.setAttribute('data-imgready', 'true'); }; image.src = url[0]; } else { pageHeader.setAttribute('data-imgready', 'true'); } } } } else { for (var i = 0; i < backs.length; i++) { if (i == 0) { if (!!backs[i].style.backgroundImage && backs[i].style.backgroundImage !== void 0) { var url = (backs[i].style.backgroundImage).match(uri_pattern), image = new Image(); image.onload = function() { pageHeader.setAttribute('data-imgready', 'true'); }; image.src = url[0]; } else { pageHeader.setAttribute('data-imgready', 'true'); } } } } } } if (masthead != undefined && !classie.hasClass(masthead, 'masthead-vertical')) { if (header.length) { masthead.parentNode.style.height = menuHeight + 'px'; if (menuwrapper[0] != undefined) classie.addClass(menuwrapper[0], 'with-header'); for (var j = 0; j < header.length; j++) { var headerel = header[j], closestStyle = getClosest(headerel, 'style-light'); if (closestStyle != null && classie.hasClass(closestStyle, 'style-light')) { switchColorsMenu(0, 'light'); } else if (getClosest(headerel, 'style-dark') != null) { switchColorsMenu(0, 'dark'); } else { if (masthead.style.opacity !== 1) masthead.style.opacity = 1; } if (classie.hasClass(masthead, 'menu-transparent')) { if (isMobileTransparent || wwidth > mediaQuery) { masthead.parentNode.style.height = '0px'; if (classie.hasClass(masthead, 'menu-add-padding')) { var headerBlock = getClosest(headerel, 'header-uncode-block'); if (headerBlock != null) { var innerRows = headerel.querySelectorAll('.column_parent > .uncol > .uncoltable > .uncell > .uncont, .uncode-slider .column_child > .uncol > .uncoltable > .uncell > .uncont'); for (var k = 0; k < innerRows.length; k++) { if (innerRows[k] != undefined) { if (wwidth > mediaQuery) innerRows[k].style.paddingTop = transmenuHeight + 'px'; else innerRows[k].style.paddingTop = (transmenuHeight - mastheadMobilePaddingTop) + 'px'; } } } else { getDivChildren(headerel, '.header-content', function(headerContent, i) { if (wwidth > mediaQuery) headerContent.style.paddingTop = transmenuHeight + 'px'; else headerContent.style.paddingTop = (transmenuHeight - mastheadMobilePaddingTop) + 'px'; }); } } } } if (classie.hasClass(headerel, 'uncoltable')) { break; } } } else { if (menuwrapper[0] != undefined) classie.addClass(menuwrapper[0], 'no-header'); classie.removeClass(masthead, 'menu-transparent'); transmenuHeight = 0; isMobileTransparent = false; } } else { isMobileTransparent = false; } if (typeof transmenuel === 'undefined' || !transmenuel.length) isMobileTransparent = false; bodyTop = document.documentElement['scrollTop'] || document.body['scrollTop']; UNCODE.bodyTop = bodyTop; if (!classie.hasClass(document.body, 'vmenu')) initBox(); scrollFunction(); showHideScrollup(bodyTop); if ( UNCODE.isMobile ) { var eventName = 'loadedmetadata'; eventName = eventName.replace(/^on/, ''); var elt = document.createElement('video'[eventName]); var eventIsSupported = ('on'+eventName in elt); elt = null; if ( ! eventIsSupported) { classie.addClass(document.body, 'video-not-supported'); } } }, initRow = function(currentRow) { UNCODE.adaptive(); var el = typeof currentRow.parentNode !== 'undefined' && currentRow.parentNode.parentNode.getAttribute("data-parent") == 'true' ? currentRow.parentNode : ( currentRow.getAttribute("data-parent") == 'true' ? currentRow.querySelector('.row-parent') : currentRow.parentNode.parentNode ), rowParent = el.parentNode, rowInner = currentRow.parentNode, percentHeight = el.getAttribute("data-height-ratio"), minHeight = el.getAttribute("data-minheight"), calculateHeight, calculatePadding = 0, isHeader = false, isFirst = false, uri_pattern = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig; /** Add class to the row when contains responsive column size */ getDivChildren(el.parentNode, '.column_parent, .column_child', function(obj, i, total) { if ((obj.className).indexOf("col-md-") > - 1) { classie.addClass(obj.parentNode, 'cols-md-responsive'); } obj.className = obj.className.replace(/vc_col-sm-(\d{1,2})/g, ""); if ((obj.className).indexOf("col-sm-") > - 1 && (obj.className).indexOf("col-sm-clear") == - 1) { classie.addClass(obj.parentNode, 'cols-sm-responsive'); } }); setRowHeight(el); var elements = 0; getDivChildren(el, '.row-internal .background-inner', function(obj, i, total) { elements++; if (i == 0) { if (!!obj.style.backgroundImage && obj.style.backgroundImage !== void 0) { var url = (obj.style.backgroundImage).match(uri_pattern), image = new Image(); image.onload = function() { el.setAttribute('data-imgready', 'true'); el.dispatchEvent(new CustomEvent('imgLoaded')); }; image.src = url[0]; } else { el.setAttribute('data-imgready', 'true'); el.dispatchEvent(new CustomEvent('imgLoaded')); } } }); if (elements == 0) { el.setAttribute('data-imgready', 'true'); } /** init parallax is not mobile */ if ( ! UNCODE.isFullPage ) { bodyTop = document.documentElement['scrollTop'] || document.body['scrollTop']; kenburnsRows = el.parentNode.parentNode.querySelectorAll('.with-kburns > .row-background > .background-wrapper, .with-kburns > .fp-tableCell > .row-background > .background-wrapper, .with-kburns > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); kenburnsCols = el.querySelectorAll('.with-kburns > .column-background > .background-wrapper'); backwashRows = el.parentNode.parentNode.querySelectorAll('.with-zoomout > .row-background > .background-wrapper, .with-zoomout > .fp-tableCell > .row-background > .background-wrapper, .with-zoomout > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); backwashCols = el.querySelectorAll('.with-zoomout > .column-background > .background-wrapper'); if (isMobileParallaxAllowed || !UNCODE.isMobile) { parallaxRows = el.parentNode.parentNode.querySelectorAll('.with-parallax > .row-background > .background-wrapper, .with-parallax > .fp-tableCell > .row-background > .background-wrapper, .with-parallax > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); parallaxCols = el.querySelectorAll('.with-parallax > .column-background > .background-wrapper'); visibleRows = el.parentNode.parentNode; parallaxRowCol(bodyTop); visibleRowCol(bodyTop); } else { if (UNCODE.isMobile) { kenburnsHeader(bodyTop); kenburnsRowCol(bodyTop); backwashHeader(bodyTop); backwashRowCol(bodyTop); } } } shapeDivider(); var wrapLinesWw = wwidth; //Text animation, automatic lines and highlights var setWrap; function word_for_lines(event, $parent_el){ if ( typeof $parent_el === 'undefined' || $parent_el === null ) { $parent_el = document.body; } var $headings = $parent_el.querySelectorAll('.heading-text'); for (var head_k = 0; head_k < $headings.length; head_k++) { var $heading = $headings[head_k], heading_cont = $heading.innerHTML, $row = $heading.closest('.row-parent'), $owl_carousel = $heading.closest('.owl-carousel-wrapper'), $owl_item = $heading.closest('.owl-item'), $words = $heading.querySelectorAll('.split-word'), setWrap; if ( ! $words.length ) { if ( $owl_item !== null ) continue; } if ( $owl_carousel === null && typeof event !== 'undefined' && event !== 'resize' && event !== false ) { continue; } if ( $owl_carousel !== null ) { if ( ( $owl_item === null ) || ( $owl_item !== null && classie.hasClass($owl_item, 'active') && $owl_item.getAttribute('data-index') !== '1' ) || ( $owl_item !== null && classie.hasClass($owl_item, 'active') && $owl_item.getAttribute('data-index') === '1' && $owl_item.getAttribute('data-already-reached') === 'true' ) ) { continue; } } $heading.innerHTML = heading_cont; $words = $heading.querySelectorAll('.split-word'); var lineArray = [], lineIndex = 0, lineStart = true, lineEnd = false, $text_highlight = $heading.querySelectorAll('.heading-text-highlight'), $line_wraps = $heading.querySelectorAll('.heading-line-wrap'); if ( $line_wraps.length && typeof event === 'undefined' ) { continue; } var lettering = function(){ var $wraps = $parent_el.querySelectorAll('.animate_inner_when_almost_visible.curtain, .animate_inner_when_almost_visible.curtain-words, .animate_inner_when_almost_visible.typewriter, .animate_inner_when_almost_visible.single-curtain, .animate_inner_when_almost_visible.single-slide, .animate_inner_when_almost_visible.single-slide-opposite'); for (var i = 0; i < $wraps.length; i++) { var $wrap = $wraps[i], $lines = $wrap.querySelectorAll('.heading-line-wrap'), $words = $wrap.querySelectorAll('.split-word'), containerDelay = $wrap.getAttribute('data-delay'), containerSpeed = $wrap.getAttribute('data-speed'), containerSpeed_val = typeof containerSpeed !== 'undefined' && containerSpeed !== null ? parseFloat(containerSpeed) : 400, containerInterval = typeof $wrap.getAttribute('data-interval') !== 'undefined' && $wrap.getAttribute('data-interval') !== null ? $wrap.getAttribute('data-interval') : 0, delayAttr = (containerDelay != undefined) ? containerDelay : 0; if ( classie.hasClass($wrap, 'already-animated') ) { continue; } if ( classie.hasClass($wrap, 'curtain') ) { for (var il = 0; il < $lines.length; il++) { var $line = $lines[il], $spans = $line.querySelectorAll('.split-word-inner'); for (var is = 0; is < $spans.length; is++) { var $span = $spans[is]; $span.setAttribute('data-delay', ( parseFloat(delayAttr) + ( ( parseFloat(containerInterval) + 100 ) * il ) ) ); if (typeof containerSpeed_val !== 'undefined' ) { $span.setAttribute('data-speed', containerSpeed_val); } classie.addClass($span, 'animate_when_parent_almost_visible'); classie.addClass($span, 'text-bottom-t-top'); if ( is+1 === $spans.length && il+1 === $lines.length ) { classie.addClass($span, 'anim-tot-checker'); } } } } else if ( classie.hasClass($wrap, 'single-curtain') ) { var $spans = $wrap.querySelectorAll('.split-char'); for (var is = 0; is < $spans.length; is++) { var $span = $spans[is]; $span.setAttribute('data-delay', ( parseFloat(delayAttr) + ( ( parseFloat(containerInterval) + 20 ) * is ) ) ); if (typeof containerSpeed_val !== 'undefined' ) { $span.setAttribute('data-speed', containerSpeed_val); } classie.addClass($span, 'animate_when_parent_almost_visible'); classie.addClass($span, 'text-bottom-t-top'); if ( is+1 == $spans.length ) { classie.addClass($span, 'anim-tot-checker'); } }; } else if ( classie.hasClass($wrap, 'typewriter') ) { var $spans = $wrap.querySelectorAll('.split-char'); for (var is = 0; is < $spans.length; is++) { var $span = $spans[is]; $span.setAttribute('data-delay', ( parseFloat(delayAttr) + ( ( parseFloat(containerInterval) + 20 ) * is ) ) ); if (typeof containerSpeed_val !== 'undefined' ) { $span.setAttribute('data-speed', containerSpeed_val); } classie.addClass($span, 'animate_when_parent_almost_visible'); classie.addClass($span, 'typewriter'); if ( is+1 == $spans.length ) { classie.addClass($span, 'anim-tot-checker'); } } } else if ( classie.hasClass($wrap, 'single-slide') ) { var $spans = $wrap.querySelectorAll('.split-word-inner'); for (var is = 0; is < $spans.length; is++) { var $span = $spans[is]; $span.setAttribute('data-delay', ( parseFloat(delayAttr) + ( ( parseFloat(containerInterval) + 50 ) * is ) ) ); if (typeof containerSpeed_val !== 'undefined' ) { $span.setAttribute('data-speed', containerSpeed_val); } classie.addClass($span, 'animate_when_parent_almost_visible'); if ( classie.hasClass(document.body, 'rtl') ) { classie.addClass($span, 'text-left-t-right'); } else { classie.addClass($span, 'text-right-t-left'); } if ( is+1 == $spans.length ) { classie.addClass($span, 'anim-tot-checker'); } } } else if ( classie.hasClass($wrap, 'single-slide-opposite') ) { var $spans = $wrap.querySelectorAll('.split-word-inner'); for (var is = 0; is < $spans.length; is++) { var $span = $spans[is]; $span.setAttribute('data-delay', ( parseFloat(delayAttr) + ( ( parseFloat(containerInterval) + 50 ) * is ) ) ); if (typeof containerSpeed_val !== 'undefined' ) { $span.setAttribute('data-speed', containerSpeed_val); } classie.addClass($span, 'animate_when_parent_almost_visible'); if ( classie.hasClass(document.body, 'rtl') ) { classie.addClass($span, 'text-left-t-right'); } else { classie.addClass($span, 'text-right-t-left'); } if ( is+1 == $spans.length ) { classie.addClass($span, 'anim-tot-checker'); } } } else if ( classie.hasClass($wrap, 'curtain-words') ) { var $spans = $wrap.querySelectorAll('.split-word-inner'); for (var is = 0; is < $spans.length; is++) { var $span = $spans[is]; $span.setAttribute('data-delay', ( parseFloat(delayAttr) + ( ( parseFloat(containerInterval) + 50 ) * is ) ) ); if (typeof containerSpeed_val !== 'undefined' ) { $span.setAttribute('data-speed', containerSpeed_val); } classie.addClass($span, 'animate_when_parent_almost_visible'); classie.addClass($span, 'text-bottom-t-top'); if ( is+1 == $spans.length ) { classie.addClass($span, 'anim-tot-checker'); } } } } } var removeOldLines = function(){ for (var wrap_k = 0; wrap_k < $line_wraps.length; wrap_k++) { var $line_wrap = $line_wraps[wrap_k]; var $parent_wrap = $line_wrap.parentNode; while ( $line_wrap.firstChild ) { $parent_wrap.insertBefore($line_wrap.firstChild, $line_wrap); } $parent_wrap.removeChild($line_wrap); } } var createHighlightSpans = function(){ for (var high_k = 0; high_k < $text_highlight.length; high_k++) { var $highlight = $text_highlight[high_k], atts = $highlight.getAttribute('data-atts'), objAtts, styleEl = '', classEl = '', animation = false, hexRe = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i, $h_words = $highlight.querySelectorAll('.split-word'); if ( typeof atts !== 'undefined' && atts != '' ) { objAtts = JSON.parse(atts); if ( typeof objAtts.bg != 'undefined' ) { if ( hexRe.test(objAtts.bg)) { styleEl += 'background-color:' + objAtts.bg + ';'; } else { classEl += ' ' + objAtts.bg; } } if ( typeof objAtts.color != 'undefined' ) { if ( hexRe.test(objAtts.color)) { styleEl += 'color:' + objAtts.color + ';'; } else { var classChild = objAtts.color; } } if ( typeof objAtts.height != 'undefined' ) { styleEl += 'height:' + objAtts.height + ';'; } if ( typeof objAtts.offset != 'undefined' ) { styleEl += 'bottom:' + objAtts.offset + ';'; } if ( typeof objAtts.opacity != 'undefined' ) { styleEl += 'opacity:' + objAtts.opacity + ';'; } if ( objAtts.animated == 'yes' ) { animation = true; } } for (var h_words_k = 0; h_words_k < $h_words.length; h_words_k++) { var $word = $h_words[h_words_k], $new_el = document.createElement('span'); if ( typeof classChild !== 'undefined' ) { classie.addClass($word, objAtts.color); } if ( h_words_k === 0 ) { classie.addClass($word, 'first-highlight'); } else if ( (h_words_k+1) === $h_words.length ) { classie.addClass($word, 'last-highlight'); } $new_el.className = 'heading-text-highlight-inner' + classEl; if ( styleEl !== '' ) { $new_el.setAttribute('style', styleEl); } if ( animation ) { $new_el.setAttribute('data-animated', 'yes'); } $word.appendChild($new_el); }; var $parent_highlight = $highlight.parentNode; while ( $highlight.firstChild ) { $parent_highlight.insertBefore($highlight.firstChild, $highlight); } $parent_highlight.removeChild($highlight); } } var createNewLines = function(){ for (var word_k = 0; word_k < $words.length; word_k++) { var $word = $words[word_k], top = $word.offsetTop, elH = $word.offsetHeight, $next = typeof $words[(word_k+1)] !== 'undefined' ? $words[(word_k+1)] : null, nextTop = $next !== null ? $next.offsetTop : null; if (lineStart) { lineArray[lineIndex] = [word_k]; if (nextTop !== null && nextTop > (top + elH/2)) { lineArray[lineIndex].push(word_k); lineIndex++; lineStart = true; } else { lineStart = false; } } else { if (nextTop !== null && nextTop > (top + elH/2)) {//tollerance lineArray[lineIndex].push(word_k); lineIndex++; lineStart = true; } else if ( nextTop === null ) { lineArray[lineIndex].push(word_k); } } } for (var i = 0; i < lineArray.length; i++) { var start = lineArray[i][0], end = lineArray[i][1] + 1; var spanWrap = document.createElement('span'); spanWrap.className = 'heading-line-wrap'; if (!end) { window.wrap(spanWrap, $words[start]); } else { for (var _i = start; _i < end; _i++) { if ( typeof $words[_i] !== 'undefined' && $words[_i] !== null ) { classie.addClass($words[_i], 'heading-temp'); $words[_i].style.zIndex = end - _i; } } var $towrap = $heading.querySelectorAll('.heading-temp'); if ( typeof $towrap[0] !== 'undefined' && $towrap[0] !== null ) { window.wrapAll(spanWrap, $towrap); for (var _i = 0; _i < $towrap.length; _i++) { classie.removeClass($towrap[_i], 'heading-temp'); } } } if ( (i+1) == lineArray.length ) { classie.addClass($row, 'loaded-split-word'); } classie.addClass($heading, 'heading-lined'); } lettering(); } removeOldLines(); createHighlightSpans(); createNewLines(); $parent_el.addEventListener("owl-carousel-changed", function() { removeOldLines(); createHighlightSpans(); createNewLines(); }); if ( event !== 'resize' ) { document.body.dispatchEvent(new CustomEvent('uncode_waypoints')); } } } var $h_markup = document.body.querySelectorAll('.font-obs'), fontArr = new Array(); for (var i = 0; i < $h_markup.length; i++) { var font_to_check = $h_markup[i].getAttribute("data-font"); if ( font_to_check === null ) { word_for_lines(false, el); } else { var font_weight = $h_markup[i].getAttribute("data-weight"); var font_style = $h_markup[i].getAttribute("data-style"); if ( font_weight === null ) { font_weight = 'normal'; } if ( font_style === null ) { font_style = 'normal'; } font_to_check = font_to_check.split(','); var font_val = font_to_check[0].replace(/['"]+/g, ''), font_key = '\''+font_val+'_'+font_weight+'_'+font_style+'\''; if ( fontArr.indexOf( font_val+'_'+font_weight ) === -1 ) { fontArr[font_key] = {'family':font_val,'weight':font_weight,'style':font_style }; } } } var counter = 0; for (var key in fontArr) { if (fontArr.hasOwnProperty(key)) { var font = new FontFaceObserver(fontArr[key].family, { weight: fontArr[key].weight, style: fontArr[key].style } ); font.load(null, 10000).then(function (font) { counter++; if ( counter == Object.keys(fontArr).length ) { already_font = true; requestTimeout(function(){ word_for_lines(false, el); }, 10); } }, function (error) { word_for_lines(false, el); }); } } el.addEventListener("owl-carousel-initialized", function() { word_for_lines("owl-carousel-initialized", el); }); el.addEventListener("vc-shortcodeView-updated", function() { word_for_lines(false, el); }); window.addEventListener("resize", function() { if ( wwidth != wrapLinesWw ) { clearRequestTimeout(setWrap); setWrap = requestTimeout( function(){ wrapLinesWw = wwidth; word_for_lines('resize'); }, 100 ); } }); scrollFunction(); if ( uaInfo.is('chrome') ) { var videos = document.querySelectorAll('.wp-video-shortcode'); for (var i = 0; i < videos.length; i++) { var video = videos[i]; if ( typeof video.getAttribute('autoplay') !== 'undefined' && video.getAttribute('autoplay') !== null && ( typeof video.getAttribute('muted') === 'undefined' || video.getAttribute('muted') === null ) ) { video.oncanplay = function(e) { video.muted = true; video.play(); }; break; } } } }, setRowHeight = function(container, forced, resized) { var currentTallest = 0, percentHeight = 0, minHeight = 0, el, child, hasSubCols = false; if (container.length == undefined) { container = [container]; } // Loop for each container element to match their heights for (var i = 0; i < container.length; i++) { var el = container[i], $row = el, totalHeight = 0, colsArray = new Array(), calculatePadding = 0, $rowParent = $row.parentNode, isHeader = false, isFirst = false; $row.oversized = false; percentHeight = el.getAttribute("data-height-ratio"); minHeight = el.getAttribute("data-minheight"); child = (el.firstElementChild || el.firstChild); var childHeight = outerHeight(child); /** window height without header **/ if (!!percentHeight || !!minHeight || forced || (isIE && classie.hasClass(el, 'unequal')) ) { child.style.height = ''; if (!!percentHeight) { if (percentHeight == 'full') { currentTallest = parseInt(wheight); } else { currentTallest = parseInt((wheight * percentHeight) / 100); } } else { currentTallest = el.clientHeight; } if (!!minHeight) { if (currentTallest < minHeight || currentTallest == undefined) currentTallest = parseInt(minHeight); } if (getClosest(el, 'header-uncode-block') != null) { el.setAttribute('data-row-header', 'true'); isHeader = true; } else { if (pageHeader == null) { var prevRow = $rowParent.previousSibling; if (prevRow != null && prevRow.innerText == 'UNCODE.initHeader();') { isFirst = true; } } } if (classie.hasClass(el, 'row-slider')) { percentHeight = el.getAttribute("data-height-ratio"); minHeight = el.getAttribute("data-minheight"); if (percentHeight == 'full') { currentTallest = parseInt(wheight); } else { currentTallest = parseInt((wheight * percentHeight) / 100); } var computedStyleRow = getComputedStyle(el), computedStyleRowParent = getComputedStyle($rowParent); calculatePadding -= (parseFloat(computedStyleRow.paddingTop) + parseFloat(computedStyleRowParent.paddingTop)); calculatePadding -= (parseFloat(computedStyleRow.paddingBottom) + parseFloat(computedStyleRowParent.paddingBottom)); if (isHeader || isFirst) { if (isMobileTransparent || wwidth > mediaQuery) currentTallest -= menuHeight - transmenuHeight; else currentTallest -= menuHeight - secmenuHeight; currentTallest += calculatePadding; } else { if (isMobileTransparent || wwidth > mediaQuery) currentTallest += calculatePadding; else currentTallest = 'auto'; } getDivChildren(el, '.owl-carousel', function(owl, i) { owl.style.height = (currentTallest == 'auto' ? 'auto' : currentTallest + 'px'); if (isIE) { getDivChildren(owl, '.owl-stage', function(owlIn, i) { owlIn.style.height = (currentTallest == 'auto' ? '100%' : currentTallest + 'px'); }); } }); if ( UNCODE.isFullPageSnap || classie.hasClass(masthead, 'menu-transparent') ) continue; else { if ( classie.hasClass(document.body, 'uncode-fp-menu-hide') ) { $rowParent.parentNode.style.paddingTop = menuHeight + 'px'; } } } else { if (isHeader || isFirst || UNCODE.isFullPage ) { if ( !( UNCODE.isFullPage && !classie.hasClass(masthead, 'menu-transparent') && classie.hasClass(document.body, 'uncode-fp-menu-hide') && !isHeader && !isFirst ) ) { if (isMobileTransparent || wwidth > mediaQuery) currentTallest -= menuHeight - transmenuHeight; else currentTallest -= menuHeight - secmenuHeight; } if ( UNCODE.isFullPage && classie.hasClass(document.body, 'uncode-scroll-safe-padding') && classie.hasClass(masthead, 'menu-transparent') && !classie.hasClass(document.body, 'uncode-fp-menu-hide') ) { var safeMenuHeight = parseFloat(document.body.getAttribute("data-additional-padding")) + parseFloat(menuHeight); if ( (" " + child.parentNode.className + " ").replace(/[\n\t]/g, " ").indexOf("-top-padding ") < 0 || classie.hasClass(child.parentNode, 'single-top-padding') ) { classie.addClass(child.parentNode, 'fp-safe-padding-top'); child.parentNode.style.paddingTop = safeMenuHeight + 'px'; } if ( (" " + child.parentNode.className + " ").replace(/[\n\t]/g, " ").indexOf("-bottom-padding ") < 0 || classie.hasClass(child.parentNode, 'single-bottom-padding') ) { classie.addClass(child.parentNode, 'fp-safe-padding-bottom'); child.parentNode.style.paddingBottom = safeMenuHeight + 'px'; } } if ( !classie.hasClass(masthead, 'menu-transparent') && classie.hasClass(document.body, 'uncode-fp-menu-hide') && ( isFirst || isHeader ) ) $rowParent.parentNode.style.paddingTop = menuHeight + 'px'; var computedStyleRow = getComputedStyle(el), computedStyleRowParent = getComputedStyle($rowParent); calculatePadding -= (parseFloat(computedStyleRow.paddingTop) + parseFloat(computedStyleRowParent.paddingTop)); calculatePadding -= (parseFloat(computedStyleRow.paddingBottom) + parseFloat(computedStyleRowParent.paddingBottom)); currentTallest += calculatePadding; } else { var computedStyleRow = getComputedStyle(el), computedStyleRowParent = getComputedStyle($rowParent); calculatePadding -= (parseFloat(computedStyleRow.paddingTop) + parseFloat(computedStyleRowParent.paddingTop)); calculatePadding -= (parseFloat(computedStyleRow.paddingBottom) + parseFloat(computedStyleRowParent.paddingBottom)); if (wwidth > mediaQuery) currentTallest += calculatePadding; else currentTallest = 'auto'; } } if ( UNCODE.isFullPage ) { currentTallest -= UNCODE.adminBarHeight; } if (!!minHeight) { if (currentTallest < minHeight || currentTallest == 'auto') currentTallest = parseInt(minHeight); } child.style.height = (currentTallest == 'auto' ? 'auto' : currentTallest + 'px'); } else { currentTallest = 0; if ( UNCODE.isFrontEndEditor && child !== null ) { child.style.height = ''; getDivChildren(el, '.owl-carousel', function(owl, i) { owl.style.height = ''; if (isIE) { getDivChildren(owl, '.owl-stage', function(owlIn, i) { owlIn.style.height = ''; }); } }); } } if (wwidth > mediaQuery) { getDivChildren(el, '.column_parent', function(col, i, total) { var $col = col, $colHeight = 0, $colDiff = 0, $colPercDiff = 100; $col.oversized = false; $col.forceHeight = currentTallest; currentTallest = child.clientHeight; if ((isHeader || isFirst) && currentTallest != 'auto') currentTallest -= transmenuHeight; var getFirstCol = null, getMargin = 0, getSubMargin = 0; getDivChildren(col, '.row-child', function(obj, i, total) { var $colChild = obj, $colParent = $colChild.parentNode, computedStyleCol = getComputedStyle($colParent); parseFloat(computedStyleCol.marginTop); getSubMargin += parseFloat(computedStyleCol.marginTop); }); currentTallest += getSubMargin; getDivChildren(col, '.row-child', function(obj, i, total) { var $colChild = obj, $colInner, $colParent = $colChild.parentNode, $uncont = $colParent.parentNode; for (var it = 0; it < $colChild.childNodes.length; it++) { if ( ! classie.hasClass($colChild.childNodes[it], 'uncode-divider-wrap') ) { $colInner = $colChild.childNodes[it]; break; } } if (i == 0 && total > 1) getFirstCol = $colInner; $colChild.oversized = false; percentHeight = $colChild.getAttribute("data-height"); minHeight = $colChild.getAttribute("data-minheight"); if (percentHeight != null || minHeight != null) { if ( ! classie.hasClass($colInner, 'uncode-divider-wrap') ) $colInner.style.height = ''; $colParent.style.height = 'auto'; $uncont.style.height = '100%'; $colChild.removeAttribute("style"); var newHeight = (percentHeight != null) ? Math.ceil((currentTallest) * (percentHeight / 100)) : parseInt(minHeight); var computedStyleCol = getComputedStyle($colParent); getMargin = parseFloat(computedStyleCol.marginTop); newHeight -= (getMargin); $colPercDiff -= (percentHeight != null) ? percentHeight : 0; if (currentTallest > newHeight) { var getColHeight = outerHeight($colChild); if (getColHeight > newHeight) { $colHeight += getColHeight; $colDiff += getColHeight; $colChild.oversized = true; $col.oversized = true; $row.oversized = true; } else { $colHeight += newHeight; if ( ! classie.hasClass($colInner, 'uncode-divider-wrap') ) $colInner.style.height = newHeight + 'px'; } } } else { $colHeight += outerHeight($colChild); } }); if (getFirstCol != null) { getFirstCol.style.height = (parseFloat(getFirstCol.style.height) - getMargin) + 'px'; } colsArray.push({ colHeight: $colHeight, colDiv: $col }); $col.colDiff = $colDiff; $col.colPercDiff = $colPercDiff; }); if ($row.oversized) { child.style.height = ''; colsArray.sort(function(a, b) { if (a.colHeight < b.colHeight) return 1; if (a.colHeight > b.colHeight) return -1; return 0; }); var $totalHeight = 0; colsArray.forEach(function(col) { var $col = col.colDiv, $colHeight = col.colHeight; getDivChildren($col, '.row-child', function(obj, i, total) { var $colChild = obj, $colInner = $colChild.children[0], percentHeight = $colChild.getAttribute("data-height"), $colParent = $colChild.parentNode, $uncont = $colParent.parentNode, newHeight; $colHeight = $col.forceHeight - $col.colDiff; if (percentHeight != null) { if ($colHeight > 0) { if ($col.oversized) { if (!$colChild.oversized) { newHeight = Math.ceil(($colHeight) * (percentHeight / $col.colPercDiff)); if (i == total - 1 && total > 1) { $uncont.style.height = 'auto'; $colChild.style.display = 'none'; newHeight = outerHeight($col.parentNode) - outerHeight($uncont); $uncont.style.height = '100%'; $colChild.style.display = 'table'; } if (newHeight == 0) newHeight = Math.ceil(($col.forceHeight) * (percentHeight / 100)); $colInner.style.height = newHeight + 'px'; } } else { if ($totalHeight == 0) newHeight = Math.ceil(($colHeight) * (percentHeight / $col.colPercDiff)); else { newHeight = Math.ceil(($totalHeight) * (percentHeight / $col.colPercDiff)); } if (i == total - 1 && total > 1) { $uncont.style.height = 'auto'; $colChild.style.display = 'none'; newHeight = outerHeight($col.parentNode) - outerHeight($uncont); $uncont.style.height = '100%'; $colChild.style.display = 'table'; } $colInner.style.height = newHeight + 'px'; } } else { if ($colChild.oversized) { if ($totalHeight == 0) newHeight = Math.ceil(($colHeight) * (percentHeight / $col.colPercDiff)); else { if ($col.colPercDiff == 0) $col.colPercDiff = 100; newHeight = Math.ceil(($totalHeight) * (percentHeight / $col.colPercDiff)); } if (i == total - 1 && total > 1) { $uncont.style.height = 'auto'; $colChild.style.display = 'none'; newHeight = outerHeight($col.parentNode) - outerHeight($uncont); $uncont.style.height = '100%'; $colChild.style.display = 'table'; } $colInner.style.height = newHeight + 'px'; } } } }); var uncell = $col.getElementsByClassName('uncell'); if (uncell[0] != undefined && $totalHeight == 0) $totalHeight = outerHeight(uncell[0]); }); } if (isFF) { getDivChildren(el, '.uncoltable', function(col, i, total) { if (col.style.minHeight != '') { col.style.height = ''; } }); } if (resized) { getDivChildren(el, '.row-child > .row-inner', function(obj, k, total) { if (obj.style.height == '') { if (wwidth > mediaQueryMobile) { var getStyle = (window.getComputedStyle((obj.parentNode), null)), getInnerHeight = (parseInt(obj.parentNode.clientHeight) - parseInt(getStyle.paddingTop) - parseInt(getStyle.paddingBottom)); obj.style.height = getInnerHeight + 'px'; //obj.style.marginBottom = '-1px'; } } }); getDivChildren(el, '.row-parent > .row-inner', function(obj, k, total) { if (obj.style.height != '') { var getStyle = (window.getComputedStyle((obj.parentNode), null)), getInnerHeight = (parseInt(obj.parentNode.clientHeight) - parseInt(getStyle.paddingTop) - parseInt(getStyle.paddingBottom)), getTempHeight = parseInt(obj.style.height); if (getInnerHeight > getTempHeight) { obj.style.height = getInnerHeight + 'px'; //obj.style.marginBottom = '-1px'; } } }); } } else { if (isFF) { getDivChildren(el, '.uncoltable', function(col, i, total) { if (col.style.minHeight != '') { col.style.height = ''; col.style.height = outerHeight(col.parentNode) + 'px'; } }); } if (isIE && (wwidth > mediaQueryMobile)) { if (child.style.height == 'auto') { child.style.height = outerHeight(child) + 'px'; } } } if (isFF) { var sliderColumnFix = document.querySelector('.uncode-slider .row-inner > .column_child:only-child'); if (sliderColumnFix != null) { if (wwidth > mediaQuery) { sliderColumnFix.style.setProperty("height", ""); } else { sliderColumnFix.style.setProperty("height", ""); sliderColumnFix.style.setProperty("height", outerHeight(sliderColumnFix.parentNode) + "px", "important"); } } } }; window.scroll(0, scrollRowHeight_fix); }, headerHeight = function(container) { forEachElement(container, function(el, i) { var getHeight = el.getAttribute("data-height"), newHeight = ((wheight * getHeight) / 100); if (getHeight != 'fixed' && newHeight != 0) { if (isMobileTransparent || wwidth > mediaQuery) newHeight -= menuHeight - transmenuHeight; else newHeight -= menuHeight - secmenuHeight; el.style.height = newHeight + 'px'; } }); if (masthead != undefined) { masthead.parentNode.style.height = menuHeight + 'px'; if (header != undefined && header.length) { if (classie.hasClass(masthead, 'menu-transparent')) { if (isMobileTransparent || wwidth > mediaQuery) { masthead.parentNode.style.height = '0px'; if (classie.hasClass(masthead, 'menu-add-padding')) { for (var j = 0; j < header.length; j++) { var headerel = header[j]; var headerBlock = getClosest(headerel, 'header-uncode-block'); if (headerBlock != null) { var innerRows = headerel.querySelectorAll('.column_parent > .uncol > .uncoltable > .uncell > .uncont, .uncode-slider .column_child > .uncol > .uncoltable > .uncell > .uncont'); for (var k = 0; k < innerRows.length; k++) { if (innerRows[k] != undefined) { if (wwidth > mediaQuery) innerRows[k].style.paddingTop = transmenuHeight + 'px'; else innerRows[k].style.paddingTop = (transmenuHeight - mastheadMobilePaddingTop) + 'px'; } } } else { getDivChildren(headerel, '.header-content', function(headerContent, i) { if (wwidth > mediaQuery) headerContent.style.paddingTop = transmenuHeight + 'px'; else headerContent.style.paddingTop = (transmenuHeight - mastheadMobilePaddingTop) + 'px'; }); } } } } } } } }, initVideoComponent = function(container, classTarget) { if ( UNCODE.isFrontEndEditor ) return; getDivChildren(container, classTarget, function(el, i) { var width = outerWidth(el), pWidth, // player width, to be defined height = outerHeight(el), pHeight, // player height, tbd $tubularPlayer = (el.getElementsByTagName('iframe').length == 1) ? el.getElementsByTagName('iframe') : el.getElementsByTagName('video'), ratio = (el.getAttribute("data-ratio") != null) ? Number(el.getAttribute("data-ratio")) : typeof $tubularPlayer[0] !== 'undefined' ? $tubularPlayer[0].getAttribute("data-ratio") : '1.8', heightOffset = 80, widthOffset = heightOffset * ratio; // when screen aspect ratio differs from video, video must center and underlay one dimension if ($tubularPlayer[0] != undefined) { if (width / ratio < height) { // if new video height < window height (gap underneath) pWidth = Math.ceil((height + heightOffset) * ratio); // get new player width $tubularPlayer[0].style.width = pWidth + widthOffset + 'px'; $tubularPlayer[0].style.height = height + heightOffset + 'px'; $tubularPlayer[0].style.left = ((width - pWidth) / 2) - (widthOffset / 2) + 'px'; $tubularPlayer[0].style.top = '-' + (heightOffset / 2) + 'px'; $tubularPlayer[0].style.position = 'absolute'; } else { // new video width < window width (gap to right) pHeight = Math.ceil(width / ratio); // get new player height $tubularPlayer[0].style.width = width + widthOffset + 'px'; $tubularPlayer[0].style.height = pHeight + heightOffset + 'px'; $tubularPlayer[0].style.left = '-' + (widthOffset / 2) + 'px'; $tubularPlayer[0].style.top = ((height - pHeight) / 2) - (heightOffset / 2) + 'px'; $tubularPlayer[0].style.position = 'absolute'; } } }); }, init_overlay = function() { if ( UNCODE.isFrontEndEditor ) return; var triggerButton, closeButtons = new Array(); function toggleOverlay(btn) { Array.prototype.forEach.call(document.querySelectorAll('div.overlay'), function(overlay) { if (btn.getAttribute('data-area') == overlay.getAttribute('data-area')) { var container = document.querySelector('div.' + btn.getAttribute('data-container')), inputField = overlay.querySelector('.search-field'); if (classie.has(overlay, 'open')) { window.dispatchEvent(menuClose); overlayOpened = false; classie.remove(overlay, 'open'); classie.remove(container, 'overlay-open'); classie.add(overlay, 'close'); classie.remove(overlay, 'open-items'); var onEndTransitionFn = function(ev) { if (transitionEvent) { if (ev.propertyName !== 'visibility') return; this.removeEventListener(transitionEvent, onEndTransitionFn); } classie.remove(overlay, 'close'); }; if (transitionEvent) { overlay.addEventListener(transitionEvent, onEndTransitionFn); } else { onEndTransitionFn(); } } else if (!classie.has(overlay, 'close')) { window.dispatchEvent(menuOpen); overlayOpened = true; classie.add(overlay, 'open'); classie.add(container, 'overlay-open'); if (jQuery('body.menu-overlay').length == 0) { setTimeout(function() { inputField.focus(); }, 1000); } setTimeout(function() { if (classie.has(overlay, 'overlay-sequential')) classie.add(overlay, 'open-items'); }, 800); } } }); if (classie.hasClass(btn, 'search-icon') || classie.hasClass(btn, 'menu-close-search')) return; if (classie.hasClass(triggerButton, 'close')) { UNCODE.menuOpened = false; classie.removeClass(triggerButton, 'close'); classie.addClass(triggerButton, 'closing'); Array.prototype.forEach.call(closeButtons, function(closeButton) { if (!classie.hasClass(closeButton, 'menu-close-search')) { classie.removeClass(closeButton, 'close'); classie.addClass(closeButton, 'closing'); } }); setTimeout(function() { classie.removeClass(triggerButton, 'closing'); triggerButton.style.opacity = 1; Array.prototype.forEach.call(closeButtons, function(closeButton) { if (!classie.hasClass(closeButton, 'menu-close-search')) { classie.removeClass(closeButton, 'closing'); closeButton.style.opacity = 0; } }); }, 800); } else { UNCODE.menuOpened = true; triggerButton.style.opacity = 0; var getBtnRect = !classie.hasClass(triggerButton, 'search-icon') ? triggerButton.getBoundingClientRect() : null; Array.prototype.forEach.call(closeButtons, function(closeButton) { if (!classie.hasClass(closeButton, 'menu-close-search')) { classie.addClass(triggerButton, 'close'); if (getBtnRect != null) closeButton.setAttribute('style', 'top:' + getBtnRect.top + 'px; left:'+ getBtnRect.left + 'px !important'); classie.addClass(closeButton, 'close'); closeButton.style.opacity = 1; } }); window.addEventListener("resize", function() { positionCloseBtn(triggerButton, closeButtons); }); } } function positionCloseBtn(triggerButton, closeButtons){ var getBtnRect = !classie.hasClass(triggerButton, 'search-icon') ? triggerButton.getBoundingClientRect() : null; Array.prototype.forEach.call(closeButtons, function(closeButton) { if (!classie.hasClass(closeButton, 'menu-close-search')) { if (getBtnRect != null) closeButton.setAttribute('style', 'top:' + getBtnRect.top + 'px; left:'+ getBtnRect.left + 'px !important'); closeButton.style.opacity = 1; } }); } (function bindEscape() { document.onkeydown = function(evt) { evt = evt || window.event; var isEscape = false; if ("key" in evt) { isEscape = (evt.key == "Escape" || evt.key == "Esc"); } else { isEscape = (evt.keyCode == 27); } if (isEscape && overlayOpened) { Array.prototype.forEach.call(closeButtons, function(closeButton) { if (classie.hasClass(closeButton, 'overlay-close') && classie.hasClass(closeButton, 'menu-button-overlay')) { closeButton.click(); } }); } }; })(); Array.prototype.forEach.call(document.querySelectorAll('.trigger-overlay'), function(triggerBttn) { if (UNCODE.menuOpened) return; triggerBttn.addEventListener('click', function(e) { triggerButton = e.currentTarget; if (wwidth < mediaQuery && classie.hasClass(triggerButton, 'search-icon')) { return true; } else { e.stopPropagation(); if (wwidth > mediaQuery) toggleOverlay(triggerButton); else { if (classie.addClass(triggerButton, 'search-icon')) return true; } e.preventDefault(); return false; } }, false); }); Array.prototype.forEach.call(document.querySelectorAll('.overlay-close'), function(closeBttn) { closeButtons.push(closeBttn); closeBttn.addEventListener('click', function(e) { if (wwidth > mediaQuery) toggleOverlay(closeBttn); e.preventDefault(); return false; }, false); }); }, /** All scrolling functions - Begin */ /** Shrink menu **/ shrinkMenu = function(bodyTop) { if ( UNCODE.isFrontEndEditor ) return; var logoShrink, offset = 100; for (var i = 0; i < logoel.length; i++) { if (((secmenuHeight == 0) ? bodyTop > menuHeight : bodyTop > secmenuHeight + offset) && !classie.hasClass(logoel[i], 'shrinked') && (wwidth > mediaQuery)) { classie.addClass(logoel[i], 'shrinked'); if (logoMinScale != undefined) { logoShrink = logolink.children; Array.prototype.forEach.call(logoShrink, function(singleLogo) { singleLogo.style.height = logoMinScale + 'px'; singleLogo.style.lineHeight = logoMinScale + 'px'; if (classie.hasClass(singleLogo, 'text-logo')) singleLogo.style.fontSize = logoMinScale + 'px'; }); } setTimeout(function() { calculateMenuHeight(false); //window.dispatchEvent(new Event('resize')); }, 300); } else if ((((secmenuHeight == 0) ? bodyTop == 0 : bodyTop <= secmenuHeight + offset) || (wwidth < mediaQuery)) && classie.hasClass(logoel[i], 'shrinked')) { classie.removeClass(logoel[i], 'shrinked'); if (logoMinScale != undefined) { logoShrink = logolink.children; Array.prototype.forEach.call(logoShrink, function(singleLogo) { singleLogo.style.height = singleLogo.getAttribute('data-maxheight') + 'px'; singleLogo.style.lineHeight = singleLogo.getAttribute('data-maxheight') + 'px'; if (classie.hasClass(singleLogo, 'text-logo')) singleLogo.style.fontSize = singleLogo.getAttribute('data-maxheight') + 'px'; }); } setTimeout(function() { calculateMenuHeight(false); //window.dispatchEvent(new Event('resize')); }, 300); } } }, /** Switch colors menu **/ switchColorsMenu = function(bodyTop, style) { for (var i = 0; i < transmenuel.length; i++) { if (masthead.style.opacity !== 1) masthead.style.opacity = 1; if ((secmenuHeight == 0) ? bodyTop > menuHeight / 2 : bodyTop > secmenuHeight) { if (classie.hasClass(masthead, 'style-dark-original')) { logo.className = logo.className.replace("style-light", "style-dark"); } if (classie.hasClass(masthead, 'style-light-original')) { logo.className = logo.className.replace("style-dark", "style-light"); } if (style != undefined) { if (style == 'dark') { classie.removeClass(transmenuel[i], 'style-light-override'); } if (style == 'light') { classie.removeClass(transmenuel[i], 'style-dark-override'); } classie.addClass(transmenuel[i], 'style-' + style + '-override'); } } else { if (style != undefined) { if (style == 'dark') { classie.removeClass(transmenuel[i], 'style-light-override'); } if (style == 'light') { classie.removeClass(transmenuel[i], 'style-dark-override'); } classie.addClass(transmenuel[i], 'style-' + style + '-override'); } } } if (pageHeader != undefined) { if (style != undefined) { if (classie.hasClass(pageHeader, 'header-style-dark')) { classie.removeClass(pageHeader, 'header-style-dark'); } if (classie.hasClass(pageHeader, 'header-style-light')) { classie.removeClass(pageHeader, 'header-style-light'); } classie.addClass(pageHeader, 'header-style-' + style); } } }, /** VisibleRows **/ visibleRowCol = function(bodyTop) { if ( typeof visibleRows == 'object') { for (var i = 0; i < visibleRows.length; i++) { var section = visibleRows[i], sectionHeight = outerHeight(section), offSetTop = bodyTop + ( section != null ? section.getBoundingClientRect().top : 0 ), offSetPosition = wheight + bodyTop - offSetTop; if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { classie.addClass($kenburnsInner[0], 'uncode-scroll-visible'); visibleRows[i].dispatchEvent(new CustomEvent('enter-row')); } else { classie.removeClass($kenburnsInner[0], 'uncode-scroll-visible'); visibleRows[i].dispatchEvent(new CustomEvent('exit-row')); } } } }, /** KenBurns **/ kenburnsHeader = function(bodyTop) { var value; if ( typeof kenburnsHeaders == 'object' && kenburnsHeaders.length ) { for (var i = 0; i < kenburnsHeaders.length; i++) { var section = kenburnsHeaders[i].parentNode, sectionHeight = outerHeight(section), offSetTop = bodyTop + (section != null ? (classie.hasClass(section.parentNode.parentNode, 'owl-carousel') ? section.parentNode.parentNode.getBoundingClientRect().top : section.getBoundingClientRect().top) : 0), offSetPosition = wheight + bodyTop - offSetTop, $kenburnsInner = kenburnsHeaders[i].querySelectorAll('.header-bg'); if (classie.hasClass(kenburnsHeaders[i], 'header-carousel-wrapper')) { $kenburnsInner = kenburnsHeaders[i].querySelectorAll('.t-background-cover'); } if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { for (var i = 0; i < $kenburnsInner.length; i++) { classie.addClass($kenburnsInner[i], 'uncode-kburns'); $kenburnsInner[i].dispatchEvent(new CustomEvent('enter-kburns')); } } else { for (var i = 0; i < $kenburnsInner.length; i++) { classie.removeClass($kenburnsInner[i], 'uncode-kburns'); $kenburnsInner[i].dispatchEvent(new CustomEvent('exit-kburns')); } } } } }, kenburnsRowCol = function(bodyTop) { var value; if ( UNCODE.isFrontEndEditor ) { kenburnsRows = document.querySelectorAll('.with-kburns > .row-background > .background-wrapper, .with-kburns > .fp-tableCell > .row-background > .background-wrapper, .with-kburns > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); } if ( typeof kenburnsRows == 'object' && kenburnsRows.length ) { for (var i = 0; i < kenburnsRows.length; i++) { var section = kenburnsRows[i].parentNode, sectionHeight = outerHeight(section), offSetTop = bodyTop + (section != null ? (classie.hasClass(section.parentNode.parentNode, 'owl-carousel') ? section.parentNode.parentNode.getBoundingClientRect().top : section.getBoundingClientRect().top) : 0), offSetPosition = wheight + bodyTop - offSetTop, $kenburnsInner = kenburnsRows[i].querySelectorAll('.background-inner, .header-bg'); if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { classie.addClass($kenburnsInner[0], 'uncode-kburns'); $kenburnsInner[0].dispatchEvent(new CustomEvent('enter-kburns')); } else { classie.removeClass($kenburnsInner[0], 'uncode-kburns'); $kenburnsInner[0].dispatchEvent(new CustomEvent('exit-kburns')); } } } if ( UNCODE.isFrontEndEditor ) { kenburnsCols = document.querySelectorAll('.with-kburns > .column-background > .background-wrapper'); } if ( typeof kenburnsCols == 'object' && kenburnsCols.length ) { for (var j = 0; j < kenburnsCols.length; j++) { var elm = kenburnsCols[j], $kenburnsInner = elm.querySelectorAll('.background-inner'); if (checkVisible(elm)) { classie.addClass($kenburnsInner[0], 'uncode-kburns'); $kenburnsInner[0].dispatchEvent(new CustomEvent('enter-kburns')); } else { classie.removeClass($kenburnsInner[0], 'uncode-kburns'); $kenburnsInner[0].dispatchEvent(new CustomEvent('exit-kburns')); } } } }, /** Zoom Out BackWash **/ backwashHeader = function(bodyTop) { var value; var onEndAnimationFn = function(ev){ if (animationEvent) { if (ev.animationName !== 'backwash') { return; } this.removeEventListener(animationEvent, onEndAnimationFn); } classie.addClass(ev.target, 'uncode-zoomout-already'); } if ( typeof backwashHeaders == 'object' && backwashHeaders.length ) { for (var i = 0; i < backwashHeaders.length; i++) { var section = backwashHeaders[i].parentNode, sectionHeight = outerHeight(section), offSetTop = bodyTop + (section != null ? (classie.hasClass(section.parentNode.parentNode, 'owl-carousel') ? section.parentNode.parentNode.getBoundingClientRect().top : section.getBoundingClientRect().top) : 0), offSetPosition = wheight + bodyTop - offSetTop, $backwashInner = backwashHeaders[i].querySelectorAll('.header-bg'); if ( classie.hasClass($backwashInner[0], 'uncode-video-container') ) { continue; } if (classie.hasClass(backwashHeaders[i], 'header-carousel-wrapper')) { $backwashInner = backwashHeaders[i].querySelectorAll('.t-background-cover'); } if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { for (var i = 0; i < $backwashInner.length; i++) { classie.addClass($backwashInner[i], 'uncode-zoomout'); $backwashInner[i].dispatchEvent(new CustomEvent('enter-zoomout')); } } else { for (var i = 0; i < $backwashInner.length; i++) { classie.removeClass($backwashInner[i], 'uncode-zoomout'); $backwashInner[i].dispatchEvent(new CustomEvent('exit-zoomout')); } } for (var i = 0; i < $backwashInner.length; i++) { $backwashInner[i].addEventListener(animationEvent, onEndAnimationFn); } } } }, backwashRowCol = function(bodyTop) { var value; var onEndAnimationFn = function(ev){ if (animationEvent) { if (ev.animationName !== 'backwash') { return; } this.removeEventListener(animationEvent, onEndAnimationFn); } classie.addClass(ev.target, 'uncode-zoomout-already'); } if ( UNCODE.isFrontEndEditor ) { backwashRows = document.querySelectorAll('.with-zoomout > .row-background > .background-wrapper, .with-zoomout > .fp-tableCell > .row-background > .background-wrapper, .with-zoomout > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); } if ( typeof backwashRows == 'object' && backwashRows.length ) { for (var i = 0; i < backwashRows.length; i++) { var section = backwashRows[i].parentNode, sectionHeight = outerHeight(section), offSetTop = bodyTop + (section != null ? (classie.hasClass(section.parentNode.parentNode, 'owl-carousel') ? section.parentNode.parentNode.getBoundingClientRect().top : section.getBoundingClientRect().top) : 0), offSetPosition = wheight + bodyTop - offSetTop, $backwashInner = backwashRows[i].querySelectorAll('.background-inner'); if ( classie.hasClass($backwashInner[0], 'uncode-video-container') ) { continue; } if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight) ) { classie.addClass($backwashInner[0], 'uncode-zoomout'); $backwashInner[0].dispatchEvent(new CustomEvent('enter-zoomout')); } else { classie.removeClass($backwashInner[0], 'uncode-zoomout'); $backwashInner[0].dispatchEvent(new CustomEvent('exit-zoomout')); } $backwashInner[0].addEventListener(animationEvent, onEndAnimationFn); } } if ( UNCODE.isFrontEndEditor ) { backwashCols = document.querySelectorAll('.with-zoomout > .column-background > .background-wrapper'); } if ( typeof backwashCols == 'object' && backwashCols.length ) { for (var j = 0; j < backwashCols.length; j++) { var elm = backwashCols[j], $backwashInner = elm.querySelectorAll('.background-inner'); if (checkVisible(elm)) { classie.addClass($backwashInner[0], 'uncode-zoomout'); $backwashInner[0].dispatchEvent(new CustomEvent('enter-zoomout')); } else { classie.removeClass($backwashInner[0], 'uncode-zoomout'); $backwashInner[0].dispatchEvent(new CustomEvent('exit-zoomout')); } $backwashInner[0].addEventListener(animationEvent, onEndAnimationFn); } } }, /** Parallax Rows **/ parallaxRowCol = function(bodyTop) { var value; if ( UNCODE.isFrontEndEditor ) { parallaxRows = document.querySelectorAll('.with-parallax > .row-background > .background-wrapper, .with-parallax > .fp-tableCell > .row-background > .background-wrapper, .with-parallax > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); } if (typeof parallaxRows == 'object') { for (var i = 0; i < parallaxRows.length; i++) { var section = parallaxRows[i].parentNode, thisHeight = outerHeight(parallaxRows[i]), sectionHeight = outerHeight(section), offSetTop = bodyTop + (section != null ? (classie.hasClass(section.parentNode.parentNode, 'owl-carousel') ? section.parentNode.parentNode.getBoundingClientRect().top : section.getBoundingClientRect().top) : 0), offSetPosition = wheight + bodyTop - offSetTop; if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { value = ((offSetPosition - wheight) * speedDivider); if (Math.abs(value) < (thisHeight - sectionHeight)) { translateElement(parallaxRows[i], Math.floor(value)); } else { translateElement(parallaxRows[i], Math.floor(thisHeight - sectionHeight)); } } } } if ( UNCODE.isFrontEndEditor ) { parallaxCols = document.querySelectorAll('.with-parallax > .column-background > .background-wrapper'); } if (typeof parallaxCols == 'object') { for (var j = 0; j < parallaxCols.length; j++) { var section = parallaxCols[j].parentNode, thisHeight = outerHeight(parallaxCols[j]), sectionHeight = outerHeight(section), offSetTop = bodyTop + (section != null ? section.getBoundingClientRect().top : 0), offSetPosition = wheight + bodyTop - offSetTop; if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { value = ((offSetPosition - wheight) * speedDivider); value *= .8; if (Math.abs(value) < (thisHeight - sectionHeight)) { translateElement(parallaxCols[j], Math.floor(value)); } else { translateElement(parallaxCols[j], Math.floor(thisHeight - sectionHeight)); } } } } }, /** Parallax Headers **/ parallaxHeader = function(bodyTop) { var value; if (typeof parallaxHeaders == 'object') { for (var i = 0; i < parallaxHeaders.length; i++) { var section = parallaxHeaders[i].parentNode, thisSibling = section.nextSibling, thisHeight, sectionHeight, offSetTop, offSetPosition; if (classie.hasClass(parallaxHeaders[i], 'header-carousel-wrapper')) { getDivChildren(parallaxHeaders[i], '.t-entry-visual-cont', function(item, l, total) { thisHeight = outerHeight(item); sectionHeight = outerHeight(section); offSetTop = bodyTop + section.getBoundingClientRect().top; offSetPosition = wheight + bodyTop - offSetTop; if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { value = ((offSetPosition - wheight) * speedDivider); if (Math.abs(value) < (thisHeight - sectionHeight)) { translateElement(item, Math.floor(value)); } } }); } else { thisHeight = outerHeight(parallaxHeaders[i]); sectionHeight = outerHeight(section); offSetTop = bodyTop + section.getBoundingClientRect().top; offSetPosition = wheight + bodyTop - offSetTop; if (offSetPosition > 0 && offSetPosition < (sectionHeight + wheight)) { value = ((offSetPosition - wheight) * speedDivider); if (Math.abs(value) < (thisHeight - sectionHeight)) { translateElement(parallaxHeaders[i], Math.floor(value)); } } } } } }, /** Header opacity **/ headerOpacity = function(bodyTop) { if ( UNCODE.isFrontEndEditor ) { return; } if (headerWithOpacity && headerWithOpacity.length) { var thisHeight = outerHeight(headerWithOpacity[0]); if (bodyTop > thisHeight / 8) { if (pageHeader != undefined) classie.addClass(pageHeader, 'header-scrolled'); } else { if (pageHeader != undefined) classie.removeClass(pageHeader, 'header-scrolled'); } } }, /** Show hide scroll top arrow **/ showHideScrollup = function(bodyTop) { if ( bodyTop != 0 ) { if (bodyTop > wheight || ((bodyTop + wheight) >= docheight) && docheight > 0) { classie.addClass(document.body, 'window-scrolled'); classie.removeClass(document.body, 'hide-scrollup'); if (footerScroller && footerScroller[0] != undefined) { footerScroller[0].style.display = ''; } } else { if (classie.hasClass(document.body, 'window-scrolled')) classie.addClass(document.body, 'hide-scrollup'); classie.removeClass(document.body, 'window-scrolled'); } } }, /** Fix menu **/ fixMenu = function(){ if ( UNCODE.isFrontEndEditor ) return; menuwrapper = document.querySelectorAll(".menu-wrapper"); if ( ! classie.hasClass(document.body, 'vmenu') && UNCODE.isFullPage && !UNCODE.isFullPageSnap && classie.hasClass(document.body, 'uncode-fp-menu-hide') ) { menuwrapper = document.querySelector(".menu-wrapper"); pageHeader = document.getElementById("page-header"); menuwrapper.style.position = 'fixed'; menuwrapper.style.zIndex = '5'; } }, /** Hide Menu **/ hideMenu = function(bodyTop) { if ( UNCODE.isFrontEndEditor ) return; if (UNCODE.menuOpened || bodyTop < 0) return; if (classie.hasClass(document.body, 'vmenu')) { if (wwidth < mediaQuery) menuhide = document.querySelector('#masthead .menu-hide-vertical'); else menuhide = null; } if (classie.hasClass(document.body, 'hmenu-center')) { if (wwidth > mediaQuery) menuhide = document.querySelector('#masthead .menu-hide'); else menuhide = document.querySelector('.menu-container-mobile.menu-hide'); } if (typeof menuhide == 'object' && menuhide != null && mainmenu[0] != undefined) { var translate, scrollingDown = true; /** fix for hmenu-center **/ var sticky_element = (typeof mainmenu.item === 'undefined' ? ((wwidth > mediaQuery) ? mainmenu[0] : mainmenu[1]) : mainmenu[0]); if (lastScrollValue == bodyTop) return; if (lastScrollValue > bodyTop) scrollingDown = false; else scrollingDown = true; lastScrollValue = bodyTop; if (!scrollingDown) { if (!UNCODE.scrolling) { if ((secmenuHeight == 0) ? bodyTop == 0 : bodyTop < secmenuHeight) { classie.removeClass(sticky_element.parentNode, 'is_stuck'); if (classie.hasClass(masthead, 'menu-transparent')) { if ((isMobileTransparent || wwidth > mediaQuery) && !classie.hasClass(masthead.parentNode, 'no-header')) masthead.parentNode.style.height = '0px'; } if (wwidth < mediaQuery) sticky_element.style.position = 'fixed'; else sticky_element.style.position = ''; hideMenuReset(sticky_element); clearTimeout(hidingTimer); } if (classie.hasClass(menuhide, 'menu-hided')) { classie.removeClass(menuhide, 'menu-hided'); hidingTimer = setTimeout(function() { classie.addClass(sticky_element.parentNode, 'is_stuck'); hideMenuReset(sticky_element); }, 400); } } } else { if (menusticky.length == 0 && bodyTop < wheight / 3) { if (sticky_element.style.position == 'fixed') sticky_element.style.position = ''; } if (bodyTop > wheight / 2) { clearTimeout(hidingTimer); if (!classie.hasClass(menuhide, 'menu-hided')) { classie.addClass(menuhide, 'menu-hided'); classie.addClass(sticky_element.parentNode, 'is_stuck'); if (sticky_element.style.position != 'fixed') { sticky_element.style.visibility = 'hidden'; sticky_element.style.position = 'fixed'; sticky_element.style.top = '0px'; } translateElement(menuhide, -UNCODE.menuMobileHeight - 1); } } } } }, hideMenuReset = function(sticky_element) { var topOffset = 0; if (sticky_element.style.visibility == 'hidden') sticky_element.style.visibility = ''; if (bodyBorder > 0) topOffset += bodyBorder; if (adminBar != null && window.getComputedStyle(adminBar,null).getPropertyValue("position") != 'fixed') adminBarHeight = 0; if (adminBarHeight > 0) topOffset += adminBarHeight; //sticky_element.style.top = topOffset + 'px'; if (!classie.hasClass(document.body, 'boxed-width') && boxWidth > 0) sticky_element.style.width = boxWidth + 'px'; translateElement(menuhide, 0); }, /** Stick Menu **/ stickMenu = function(bodyTop) { if (header && mainmenu[0] != undefined) { if (classie.hasClass(mainmenu[0], 'vmenu-container') && wwidth > mediaQuery) return; /** fix for hmenu-center **/ var sticky_element = (typeof mainmenu.item === 'undefined' ? ((isMobileTransparent || wwidth > mediaQuery) ? mainmenu[0] : mainmenu[1]) : mainmenu[0]); if ((secmenuHeight == 0 && (isMobileTransparent || wwidth > mediaQuery)) ? bodyTop > (0 + adminBarHeight) : bodyTop > (secmenuHeight + adminBarHeight)) { if (!classie.hasClass(sticky_element.parentNode, 'is_stuck')) { classie.addClass(sticky_element.parentNode, 'is_stuck'); sticky_element.style.position = 'fixed'; var getAnchorTop = bodyBorder; if (adminBar != null && window.getComputedStyle(adminBar,null).getPropertyValue("position") != 'fixed') adminBarHeight = 0; if (adminBarHeight > 0) getAnchorTop += adminBarHeight; sticky_element.style.top = getAnchorTop + 'px'; if (!classie.hasClass(document.body, 'boxed-width') && boxWidth > 0) sticky_element.style.width = boxWidth + 'px'; } } else { clearTimeout(hidingTimer); classie.removeClass(sticky_element.parentNode, 'is_stuck'); sticky_element.style.position = 'fixed'; if (isMobileTransparent || wwidth > mediaQuery) sticky_element.style.position = ''; if (classie.hasClass(document.body, 'hmenu-center')) sticky_element.style.position = 'absolute'; sticky_element.style.top = ''; } } }, translateElement = function(element, valueY) { var translate = 'translate3d(0, ' + valueY + 'px' + ', 0)'; element.style['-webkit-transform'] = translate; element.style['-moz-transform'] = translate; element.style['-ms-transform'] = translate; element.style['-o-transform'] = translate; element.style['transform'] = translate; }, setScrollPosition, scrollFunction = function() { if ( ! UNCODE.isFullPage ) { kenburnsHeader(bodyTop); kenburnsRowCol(bodyTop); backwashHeader(bodyTop); backwashRowCol(bodyTop); if (logoel != undefined && logoel.length && !isMobile) shrinkMenu(bodyTop); if (menusticky != undefined && menusticky.length) stickMenu(bodyTop); hideMenu(bodyTop); if (isMobileParallaxAllowed || !isMobile) { if (header && menusticky != undefined && menusticky.length) switchColorsMenu(bodyTop); parallaxRowCol(bodyTop); parallaxHeader(bodyTop); headerOpacity(bodyTop); visibleRowCol(bodyTop); } clearRequestTimeout(setScrollPosition); setScrollPosition = requestTimeout( function(){ scrollRowHeight_fix = window.pageYOffset; }, 100 ); } }, /** Shape Dividers **/ shapeDivider = function() { var $shape = '.uncode-divider-wrap'; forEachElement($shape, function($el, i) { var elH = parseInt( $el.getAttribute('data-height') ), elHunit = $el.getAttribute('data-unit'), newEl, $parent = $el.parentNode, parentH, $svg = $el.getElementsByTagName('svg')[0]; if ( elHunit == 'px' ) { switch (true) { case (wwidth < 1500 && wwidth >= 1180): newEl = elH*0.8; break; case (wwidth < 1180 && wwidth >= 960): newEl = elH*0.65; break; case (wwidth < 960 && wwidth >= 570): newEl = elH*0.5; break; case (wwidth < 570): newEl = elH*0.25; break; default: newEl = elH; } $el.style.height = newEl + elHunit; } if ( classie.hasClass($el, 'uncode-divider-preserve-ratio') && ( window.navigator.userAgent.indexOf('MSIE ') !== -1 || window.navigator.userAgent.indexOf('Trident/') !== -1 ) ) { $svg.setAttribute('preserveAspectRatio','none'); var sizes = $svg.getAttribute('viewBox').split(' '), svgW = sizes[2], svgH = sizes[3], newSvgW; newSvgW = newEl * ( svgW / svgH ); $svg.style.width = newSvgW + 'px'; } }); }; if (!noScroll && document.body == null) { window.addEventListener('scroll', function(e) { if ( ! UNCODE.isFullPage ) { bodyTop = document.documentElement.scrollTop || document.body.scrollTop; scrollFunction(); showHideScrollup(bodyTop); } }, false); } /** All scrolling functions - End */ /** help functions */ function getClosest(el, tag) { do { if (el.className != undefined && el.className.indexOf(tag) > -1) return el; } while (el = el.parentNode); // not found :( return null; } function outerHeight(el, includeMargin) { if (el != null) { var height = el.offsetHeight; if (includeMargin) { var style = el.currentStyle || getComputedStyle(el); height += parseInt(style.marginTop) + parseInt(style.marginBottom); } return height; } } function outerWidth(el, includeMargin) { var width = el.offsetWidth; if (includeMargin) { var style = el.currentStyle || getComputedStyle(el); width += parseInt(style.marginLeft) + parseInt(style.marginRight); } return width; } // Replicate jQuery .each method function forEachElement(selector, fn) { var elements = document.querySelectorAll(selector); for (var i = 0; i < elements.length; i++) fn(elements[i], i); } function getDivChildren(containerId, selector, fn) { if (containerId !== null) { var elements = containerId.querySelectorAll(selector); for (var i = 0; i < elements.length; i++) fn(elements[i], i, elements.length); } } function hideFooterScroll() { if (classie.hasClass(document.body, 'hide-scrollup')) footerScroller[0].style.display = "none"; } document.addEventListener("DOMContentLoaded", function(event) { UNCODE.adaptive(); boxWrapper = document.querySelectorAll('.box-wrapper'); docheight = boxWrapper[0] != undefined ? boxWrapper[0].offsetHeight : 0; if (!classie.hasClass(document.body, 'vmenu') && !classie.hasClass(document.body, 'menu-offcanvas')) init_overlay(); kenburnsRows = document.querySelectorAll('.with-kburns > .row-background > .background-wrapper, .with-kburns > .fp-tableCell > .row-background > .background-wrapper, .with-kburns > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); kenburnsCols = document.querySelectorAll('.with-kburns > .column-background > .background-wrapper'); backwashRows = document.querySelectorAll('.with-zoomout > .row-background > .background-wrapper, .with-zoomout > .fp-tableCell > .row-background > .background-wrapper, .with-zoomout > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); backwashCols = document.querySelectorAll('.with-zoomout > .column-background > .background-wrapper'); if (!UNCODE.isMobile || isMobileParallaxAllowed) { parallaxRows = document.querySelectorAll('.with-parallax > .row-background > .background-wrapper, .with-parallax > .fp-tableCell > .row-background > .background-wrapper, .with-parallax > .fp-tableCell > .fp-scrollable > .fp-scroller > .row-background > .background-wrapper'); parallaxCols = document.querySelectorAll('.with-parallax > .column-background > .background-wrapper'); } footerScroller = document.querySelectorAll('.footer-scroll-top'); if (footerScroller && footerScroller[0] != undefined) { if (transitionEvent) { footerScroller[0].addEventListener(transitionEvent, hideFooterScroll); } } Array.prototype.forEach.call(document.querySelectorAll('.row-inner'), function(el) { el.style.height = ''; el.style.marginBottom = ''; }); setRowHeight(document.querySelectorAll('.page-wrapper .row-parent, footer .row-parent')); }); /** On resize events **/ window.addEventListener("vc-resize", function() { scrollRowHeight_fix = window.pageYOffset; Array.prototype.forEach.call(document.querySelectorAll('.row-inner'), function(el) { el.style.height = ''; el.style.marginBottom = ''; }); setRowHeight(document.querySelectorAll('.page-wrapper .row-parent, footer .row-parent'), false, true); }); var setIsScrolling; window.addEventListener("scroll", function() { UNCODE.setIsScrolling = true; clearRequestTimeout(setIsScrolling); setIsScrolling = requestTimeout(function() { UNCODE.setIsScrolling = false; }, 66); }); window.addEventListener("resize", function() { scrollRowHeight_fix = window.pageYOffset; docheight = (boxWrapper != undefined && boxWrapper[0] != undefined) ? boxWrapper[0].offsetHeight : 0; var oldWidth = wwidth; UNCODE.wwidth = wwidth = window.innerWidth || document.documentElement.clientWidth; UNCODE.wheight = wheight = (window.innerHeight || document.documentElement.clientHeight) - (bodyBorder * 2); if ( isSplitMenu && typeof resizeTimer_ === 'undefined' ) centerSplitMenu(); if (isMobile && (oldWidth == wwidth)) return false; calculateMenuHeight(false); initBox(); headerHeight('.header-wrapper'); window.dispatchEvent(boxEvent); scrollFunction(); shapeDivider(); showHideScrollup(bodyTop); clearTimeout(resizeTimer_); resizeTimer_ = setTimeout(function() { if (isSplitMenu) centerSplitMenu(); }, 10); if ( ! UNCODE.setIsScrolling ) { clearTimeout(resizeTimer); resizeTimer = setTimeout(function() { if ( ! UNCODE.setIsScrolling ) { UNCODE.wheight = wheight = (window.innerHeight || document.documentElement.clientHeight) - (bodyBorder * 2); Array.prototype.forEach.call(document.querySelectorAll('.row-inner'), function(el) { el.style.height = ''; el.style.marginBottom = ''; }); setRowHeight(document.querySelectorAll('.page-wrapper .row-parent, footer .row-parent'), false, true); } if (!isMobile) { initVideoComponent(document.body, '.uncode-video-container.video, .uncode-video-container.self-video'); } }, 500); } }); /** * On DOM ready */ window.addEventListener("load", function(){ if (!UNCODE.isMobile) { setTimeout(function() { window.dispatchEvent(UNCODE.boxEvent); Waypoint.refreshAll(); }, 2000); } //repeat it for mobile since it changes layout on carousel after DOM loading if (UNCODE.isMobile && !isMobileParallaxAllowed) { kenburnsHeader(bodyTop); kenburnsRowCol(bodyTop); } backwashHeader(bodyTop); backwashRowCol(bodyTop); showHideScrollup(bodyTop); if (document.createEvent) { // W3C var ev = document.createEvent('Event'); ev.initEvent('resize', true, true); window.dispatchEvent(ev); } else { // IE document.fireEvent('onresize'); } }, false); var UNCODE = { bodyTop: bodyTop, boxEvent: boxEvent, bodyBorder: bodyBorder, initBox: initBox, adminBarHeight: 0, menuHeight: 0, menuMobileHeight: 0, fixMenuHeight: fixMenuHeight, initHeader: initHeader, initRow: initRow, setRowHeight: setRowHeight, switchColorsMenu: switchColorsMenu, isMobile: isMobile, scrolling: false, menuHiding: false, menuOpened: false, menuMobileTriggerEvent: menuMobileTriggerEvent, mediaQuery: mediaQuery, initVideoComponent: initVideoComponent, hideMenu: hideMenu, wwidth: wwidth, wheight: wheight, }; // transport if (typeof define === 'function' && define.amd) { // AMD define(UNCODE); } else { // browser global window.UNCODE = UNCODE; } UNCODE.adaptive = function() { var images = new Array(), getImages = document.querySelectorAll('.adaptive-async:not(.adaptive-fetching)'); for (var i = 0; i < getImages.length; i++) { var imageObj = {}, el = getImages[i]; classie.addClass(el, 'adaptive-fetching'); imageObj.unique = el.getAttribute('data-uniqueid'); imageObj.url = el.getAttribute('data-guid'); imageObj.path = el.getAttribute('data-path'); imageObj.singlew = el.getAttribute('data-singlew'); imageObj.singleh = el.getAttribute('data-singleh'); imageObj.origwidth = el.getAttribute('data-width'); imageObj.origheight = el.getAttribute('data-height'); imageObj.crop = el.getAttribute('data-crop'); imageObj.fixed = el.getAttribute('data-fixed') == undefined ? null : el.getAttribute('data-fixed'); imageObj.screen = window.uncodeScreen; imageObj.images = window.uncodeImages; images.push(imageObj); } var post_data = { images: JSON.stringify(images), action: 'get_adaptive_async', nonce_adaptive_images: SiteParameters.nonce_adaptive_images }; if (images.length > 0) { var xhr = new XMLHttpRequest(); xhr.open('POST', SiteParameters.ajax_url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.onreadystatechange = function() { if (xhr.readyState == XMLHttpRequest.DONE) { if (xhr.status == 200 && xhr.responseText) { var jsonResponse = JSON.parse(xhr.responseText); if (jsonResponse.success && jsonResponse.data.images) { var images = jsonResponse.data.images; for (var i = 0; i < images.length; i++) { var val = images[i], getImage = document.querySelectorAll('[data-uniqueid="'+val.unique+'"]'); for (var j = 0; j < getImage.length; j++) { var attrScr = getImage[j].getAttribute('src'), replaceImg = new Image(); replaceImg.source = attrScr; replaceImg.el = getImage[j]; classie.removeClass(getImage[j], 'adaptive-async'); classie.removeClass(getImage[j], 'adaptive-fetching'); replaceImg.onload = function () { var _this = this, parentNode = (_this.el).parentNode, placeH; //Workaround for lazy-load flickering on Firefox if ( typeof parentNode.prepend == 'undefined') { if (_this.source !== null) { (_this.el).src = _this.src; } else { (_this.el).style.backgroundImage = 'url("'+_this.src+'")'; } classie.addClass(_this.el, 'async-done'); } else { if (_this.source !== null) { placeH = document.createElement("IMG"); placeH.setAttribute('class', 'placeH'); placeH.src = _this.src; placeH.style.position = 'absolute'; placeH.style.opacity = '0'; } else { placeH = document.createElement("DIV"); placeH.setAttribute('style', _this.el.getAttribute('style')); placeH.setAttribute('class', 'placeH ' + _this.el.getAttribute('class')); placeH.style.backgroundImage = 'url("'+_this.src+'")'; placeH.style.backgroundSize = 'cover'; placeH.style.backgroundPosition = 'center'; placeH.style.position = 'absolute'; placeH.style.top = '0'; placeH.style.width = '100%'; placeH.style.height = '100%'; } if ( !classie.hasClass( _this.el, 'box-wrapper') ) { parentNode.prepend(placeH); } requestTimeout(function(){ if (_this.source !== null) { (_this.el).src = _this.src; } else { (_this.el).style.backgroundImage = 'url("'+_this.src+'")'; } if ( !classie.hasClass( _this.el, 'box-wrapper') ) { parentNode.removeChild(placeH); } classie.addClass(_this.el, 'async-done'); }, 250); } } replaceImg.src = val.url; } } } else { if (SiteParameters.enable_debug == true) { // This console log is disabled by default // So nothing is printed in a typical installation // // It can be enabled for debugging purposes setting // the 'uncode_enable_debug_on_js_scripts' filter to true console.log('There was an error: bad response'); } } } else if (xhr.status == 400) { if (SiteParameters.enable_debug == true) { // This console log is disabled by default // So nothing is printed in a typical installation // // It can be enabled for debugging purposes setting // the 'uncode_enable_debug_on_js_scripts' filter to true console.log('There was an error 400'); } } else { if (SiteParameters.enable_debug == true) { // This console log is disabled by default // So nothing is printed in a typical installation // // It can be enabled for debugging purposes setting // the 'uncode_enable_debug_on_js_scripts' filter to true console.log('Something else other than 200 was returned'); } } } } // Serialize our data var queryString = "", arrayLength = Object.keys(post_data).length, arrayCounter = 0; for (var key in post_data) { queryString += key + "=" + post_data[key]; if (arrayCounter < arrayLength - 1) { queryString += "&"; } arrayCounter++; } xhr.send(queryString); } }; })(window); /** * vivus - JavaScript library to make drawing animation on SVG * @version v0.4.4 * @link https://github.com/maxwellito/vivus * @license MIT */ 'use strict'; (function () { 'use strict'; /** * Pathformer * Beta version * * Take any SVG version 1.1 and transform * child elements to 'path' elements * * This code is purely forked from * https://github.com/Waest/SVGPathConverter */ /** * Class constructor * * @param {DOM|String} element Dom element of the SVG or id of it */ function Pathformer(element) { // Test params if (typeof element === 'undefined') { throw new Error('Pathformer [constructor]: "element" parameter is required'); } // Set the element if (element.constructor === String) { element = document.getElementById(element); if (!element) { throw new Error('Pathformer [constructor]: "element" parameter is not related to an existing ID'); } } if (element instanceof window.SVGElement || element instanceof window.SVGGElement || /^svg$/i.test(element.nodeName)) { this.el = element; } else { throw new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement'); } // Start this.scan(element); } /** * List of tags which can be transformed * to path elements * * @type {Array} */ Pathformer.prototype.TYPES = ['line', 'ellipse', 'circle', 'polygon', 'polyline', 'rect']; /** * List of attribute names which contain * data. This array list them to check if * they contain bad values, like percentage. * * @type {Array} */ Pathformer.prototype.ATTR_WATCH = ['cx', 'cy', 'points', 'r', 'rx', 'ry', 'x', 'x1', 'x2', 'y', 'y1', 'y2']; /** * Finds the elements compatible for transform * and apply the liked method * * @param {object} options Object from the constructor */ Pathformer.prototype.scan = function (svg) { var fn, element, pathData, pathDom, elements = svg.querySelectorAll(this.TYPES.join(',')); for (var i = 0; i < elements.length; i++) { element = elements[i]; fn = this[element.tagName.toLowerCase() + 'ToPath']; pathData = fn(this.parseAttr(element.attributes)); pathDom = this.pathMaker(element, pathData); element.parentNode.replaceChild(pathDom, element); } }; /** * Read `line` element to extract and transform * data, to make it ready for a `path` object. * * @param {DOMelement} element Line element to transform * @return {object} Data for a `path` element */ Pathformer.prototype.lineToPath = function (element) { var newElement = {}, x1 = element.x1 || 0, y1 = element.y1 || 0, x2 = element.x2 || 0, y2 = element.y2 || 0; newElement.d = 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2; return newElement; }; /** * Read `rect` element to extract and transform * data, to make it ready for a `path` object. * The radius-border is not taken in charge yet. * (your help is more than welcomed) * * @param {DOMelement} element Rect element to transform * @return {object} Data for a `path` element */ Pathformer.prototype.rectToPath = function (element) { var newElement = {}, x = parseFloat(element.x) || 0, y = parseFloat(element.y) || 0, width = parseFloat(element.width) || 0, height = parseFloat(element.height) || 0; if (element.rx || element.ry) { var rx = parseInt(element.rx, 10) || -1, ry = parseInt(element.ry, 10) || -1; rx = Math.min(Math.max(rx < 0 ? ry : rx, 0), width/2); ry = Math.min(Math.max(ry < 0 ? rx : ry, 0), height/2); newElement.d = 'M ' + (x + rx) + ',' + y + ' ' + 'L ' + (x + width - rx) + ',' + y + ' ' + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + width) + ',' + (y + ry) + ' ' + 'L ' + (x + width) + ',' + (y + height - ry) + ' ' + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + width - rx) + ',' + (y + height) + ' ' + 'L ' + (x + rx) + ',' + (y + height) + ' ' + 'A ' + rx + ',' + ry + ',0,0,1,' + x + ',' + (y + height - ry) + ' ' + 'L ' + x + ',' + (y + ry) + ' ' + 'A ' + rx + ',' + ry + ',0,0,1,' + (x + rx) + ',' + y; } else { newElement.d = 'M' + x + ' ' + y + ' ' + 'L' + (x + width) + ' ' + y + ' ' + 'L' + (x + width) + ' ' + (y + height) + ' ' + 'L' + x + ' ' + (y + height) + ' Z'; } return newElement; }; /** * Read `polyline` element to extract and transform * data, to make it ready for a `path` object. * * @param {DOMelement} element Polyline element to transform * @return {object} Data for a `path` element */ Pathformer.prototype.polylineToPath = function (element) { var newElement = {}, points = element.points.trim().split(' '), i, path; // Reformatting if points are defined without commas if (element.points.indexOf(',') === -1) { var formattedPoints = []; for (i = 0; i < points.length; i+=2) { formattedPoints.push(points[i] + ',' + points[i+1]); } points = formattedPoints; } // Generate the path.d value path = 'M' + points[0]; for(i = 1; i < points.length; i++) { if (points[i].indexOf(',') !== -1) { path += 'L' + points[i]; } } newElement.d = path; return newElement; }; /** * Read `polygon` element to extract and transform * data, to make it ready for a `path` object. * This method rely on polylineToPath, because the * logic is similar. The path created is just closed, * so it needs an 'Z' at the end. * * @param {DOMelement} element Polygon element to transform * @return {object} Data for a `path` element */ Pathformer.prototype.polygonToPath = function (element) { var newElement = Pathformer.prototype.polylineToPath(element); newElement.d += 'Z'; return newElement; }; /** * Read `ellipse` element to extract and transform * data, to make it ready for a `path` object. * * @param {DOMelement} element ellipse element to transform * @return {object} Data for a `path` element */ Pathformer.prototype.ellipseToPath = function (element) { var newElement = {}, rx = parseFloat(element.rx) || 0, ry = parseFloat(element.ry) || 0, cx = parseFloat(element.cx) || 0, cy = parseFloat(element.cy) || 0, startX = cx - rx, startY = cy, endX = parseFloat(cx) + parseFloat(rx), endY = cy; newElement.d = 'M' + startX + ',' + startY + 'A' + rx + ',' + ry + ' 0,1,1 ' + endX + ',' + endY + 'A' + rx + ',' + ry + ' 0,1,1 ' + startX + ',' + endY; return newElement; }; /** * Read `circle` element to extract and transform * data, to make it ready for a `path` object. * * @param {DOMelement} element Circle element to transform * @return {object} Data for a `path` element */ Pathformer.prototype.circleToPath = function (element) { var newElement = {}, r = parseFloat(element.r) || 0, cx = parseFloat(element.cx) || 0, cy = parseFloat(element.cy) || 0, startX = cx - r, startY = cy, endX = parseFloat(cx) + parseFloat(r), endY = cy; newElement.d = 'M' + startX + ',' + startY + 'A' + r + ',' + r + ' 0,1,1 ' + endX + ',' + endY + 'A' + r + ',' + r + ' 0,1,1 ' + startX + ',' + endY; return newElement; }; /** * Create `path` elements form original element * and prepared objects * * @param {DOMelement} element Original element to transform * @param {object} pathData Path data (from `toPath` methods) * @return {DOMelement} Path element */ Pathformer.prototype.pathMaker = function (element, pathData) { var i, attr, pathTag = document.createElementNS('http://www.w3.org/2000/svg','path'); for(i = 0; i < element.attributes.length; i++) { attr = element.attributes[i]; if (this.ATTR_WATCH.indexOf(attr.name) === -1) { pathTag.setAttribute(attr.name, attr.value); } } for(i in pathData) { pathTag.setAttribute(i, pathData[i]); } return pathTag; }; /** * Parse attributes of a DOM element to * get an object of attribute => value * * @param {NamedNodeMap} attributes Attributes object from DOM element to parse * @return {object} Object of attributes */ Pathformer.prototype.parseAttr = function (element) { var attr, output = {}; for (var i = 0; i < element.length; i++) { attr = element[i]; // Check if no data attribute contains '%', or the transformation is impossible if (this.ATTR_WATCH.indexOf(attr.name) !== -1 && attr.value.indexOf('%') !== -1) { throw new Error('Pathformer [parseAttr]: a SVG shape got values in percentage. This cannot be transformed into \'path\' tags. Please use \'viewBox\'.'); } output[attr.name] = attr.value; } return output; }; 'use strict'; var setupEnv, requestAnimFrame, cancelAnimFrame, parsePositiveInt; /** * Vivus * Beta version * * Take any SVG and make the animation * to give give the impression of live drawing * * This in more than just inspired from codrops * At that point, it's a pure fork. */ /** * Class constructor * option structure * type: 'delayed'|'sync'|'oneByOne'|'script' (to know if the items must be drawn synchronously or not, default: delayed) * duration: (in frames) * start: 'inViewport'|'manual'|'autostart' (start automatically the animation, default: inViewport) * delay: (delay between the drawing of first and last path) * dashGap whitespace extra margin between dashes * pathTimingFunction timing animation function for each path element of the SVG * animTimingFunction timing animation function for the complete SVG * forceRender force the browser to re-render all updated path items * selfDestroy removes all extra styling on the SVG, and leaves it as original * * The attribute 'type' is by default on 'delayed'. * - 'delayed' * all paths are draw at the same time but with a * little delay between them before start * - 'sync' * all path are start and finish at the same time * - 'oneByOne' * only one path is draw at the time * the end of the first one will trigger the draw * of the next one * * All these values can be overwritten individually * for each path item in the SVG * The value of frames will always take the advantage of * the duration value. * If you fail somewhere, an error will be thrown. * Good luck. * * @constructor * @this {Vivus} * @param {DOM|String} element Dom element of the SVG or id of it * @param {Object} options Options about the animation * @param {Function} callback Callback for the end of the animation */ function Vivus (element, options, callback) { setupEnv(); // Setup this.isReady = false; this.setElement(element, options); this.setOptions(options); this.setCallback(callback); if (this.isReady) { this.init(); } } /** * Timing functions ************************************** * * Default functions to help developers. * It always take a number as parameter (between 0 to 1) then * return a number (between 0 and 1) */ Vivus.LINEAR = function (x) {return x;}; Vivus.EASE = function (x) {return -Math.cos(x * Math.PI) / 2 + 0.5;}; Vivus.EASE_OUT = function (x) {return 1 - Math.pow(1-x, 3);}; Vivus.EASE_IN = function (x) {return Math.pow(x, 3);}; Vivus.EASE_OUT_BOUNCE = function (x) { var base = -Math.cos(x * (0.5 * Math.PI)) + 1, rate = Math.pow(base,1.5), rateR = Math.pow(1 - x, 2), progress = -Math.abs(Math.cos(rate * (2.5 * Math.PI) )) + 1; return (1- rateR) + (progress * rateR); }; /** * Setters ************************************** */ /** * Check and set the element in the instance * The method will not return anything, but will throw an * error if the parameter is invalid * * @param {DOM|String} element SVG Dom element or id of it */ Vivus.prototype.setElement = function (element, options) { var onLoad, self; // Basic check if (typeof element === 'undefined') { throw new Error('Vivus [constructor]: "element" parameter is required'); } // Set the element if (element.constructor === String) { element = document.getElementById(element); if (!element) { throw new Error('Vivus [constructor]: "element" parameter is not related to an existing ID'); } } this.parentEl = element; // Load the SVG with XMLHttpRequest and extract the SVG if (options && options.file) { var self = this; onLoad = function (e) { var domSandbox = document.createElement('div'); domSandbox.innerHTML = this.responseText; var svgTag = domSandbox.querySelector('svg'); if (!svgTag) { throw new Error('Vivus [load]: Cannot find the SVG in the loaded file : ' + options.file); } self.el = svgTag self.el.setAttribute('width', '100%'); self.el.setAttribute('height', '100%'); self.parentEl.appendChild(self.el) self.isReady = true; self.init(); self = null; } var oReq = new window.XMLHttpRequest(); oReq.addEventListener('load', onLoad); oReq.open('GET', options.file); oReq.send(); return; } switch (element.constructor) { case window.SVGSVGElement: case window.SVGElement: case window.SVGGElement: this.el = element; this.isReady = true; break; case window.HTMLObjectElement: self = this; onLoad = function (e) { if (self.isReady) { return; } self.el = element.contentDocument && element.contentDocument.querySelector('svg'); if (!self.el && e) { throw new Error('Vivus [constructor]: object loaded does not contain any SVG'); } else if (self.el) { if (element.getAttribute('built-by-vivus')) { self.parentEl.insertBefore(self.el, element); self.parentEl.removeChild(element); self.el.setAttribute('width', '100%'); self.el.setAttribute('height', '100%'); } self.isReady = true; self.init(); self = null; } }; if (!onLoad()) { element.addEventListener('load', onLoad); } break; default: throw new Error('Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)'); } }; /** * Set up user option to the instance * The method will not return anything, but will throw an * error if the parameter is invalid * * @param {object} options Object from the constructor */ Vivus.prototype.setOptions = function (options) { var allowedTypes = ['delayed', 'sync', 'async', 'nsync', 'oneByOne', 'scenario', 'scenario-sync']; var allowedStarts = ['inViewport', 'manual', 'autostart']; // Basic check if (options !== undefined && options.constructor !== Object) { throw new Error('Vivus [constructor]: "options" parameter must be an object'); } else { options = options || {}; } // Set the animation type if (options.type && allowedTypes.indexOf(options.type) === -1) { throw new Error('Vivus [constructor]: ' + options.type + ' is not an existing animation `type`'); } else { this.type = options.type || allowedTypes[0]; } // Set the start type if (options.start && allowedStarts.indexOf(options.start) === -1) { throw new Error('Vivus [constructor]: ' + options.start + ' is not an existing `start` option'); } else { this.start = options.start || allowedStarts[0]; } this.isIE = (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.userAgent.indexOf('Trident/') !== -1 || window.navigator.userAgent.indexOf('Edge/') !== -1 ); this.duration = parsePositiveInt(options.duration, 120); this.delay = parsePositiveInt(options.delay, null); //Uncode addition this.delayStart = parsePositiveInt(options.delayStart, null); //#END this.dashGap = parsePositiveInt(options.dashGap, 1); this.forceRender = options.hasOwnProperty('forceRender') ? !!options.forceRender : this.isIE; this.reverseStack = !!options.reverseStack; this.selfDestroy = !!options.selfDestroy; this.onReady = options.onReady; this.map = []; this.frameLength = this.currentFrame = this.delayUnit = this.speed = this.handle = null; this.ignoreInvisible = options.hasOwnProperty('ignoreInvisible') ? !!options.ignoreInvisible : false; this.animTimingFunction = options.animTimingFunction || Vivus.LINEAR; this.pathTimingFunction = options.pathTimingFunction || Vivus.LINEAR; if (this.delay >= this.duration) { throw new Error('Vivus [constructor]: delay must be shorter than duration'); } }; /** * Set up callback to the instance * The method will not return enything, but will throw an * error if the parameter is invalid * * @param {Function} callback Callback for the animation end */ Vivus.prototype.setCallback = function (callback) { // Basic check if (!!callback && callback.constructor !== Function) { throw new Error('Vivus [constructor]: "callback" parameter must be a function'); } this.callback = callback || function () {}; }; /** * Core ************************************** */ /** * Map the svg, path by path. * The method return nothing, it just fill the * `map` array. Each item in this array represent * a path element from the SVG, with informations for * the animation. * * ``` * [ * { * el: the path element * length: length of the path line * startAt: time start of the path animation (in frames) * duration: path animation duration (in frames) * }, * ... * ] * ``` * */ Vivus.prototype.mapping = function () { var i, paths, path, pAttrs, pathObj, totalLength, lengthMeter, timePoint; timePoint = totalLength = lengthMeter = 0; paths = this.el.querySelectorAll('path'); for (i = 0; i < paths.length; i++) { path = paths[i]; if (this.isInvisible(path)) { continue; } pathObj = { el: path, length: Math.ceil(path.getTotalLength()) }; // Test if the path length is correct if (isNaN(pathObj.length)) { if (window.console && console.warn) { console.warn('Vivus [mapping]: cannot retrieve a path element length', path); } continue; } this.map.push(pathObj); path.style.strokeDasharray = pathObj.length + ' ' + (pathObj.length + this.dashGap * 2); path.style.strokeDashoffset = pathObj.length + this.dashGap; pathObj.length += this.dashGap; totalLength += pathObj.length; this.renderPath(i); } totalLength = totalLength === 0 ? 1 : totalLength; this.delay = this.delay === null ? this.duration / 3 : this.delay; this.delayUnit = this.delay / (paths.length > 1 ? paths.length - 1 : 1); // Reverse stack if asked if (this.reverseStack) { this.map.reverse(); } for (i = 0; i < this.map.length; i++) { pathObj = this.map[i]; switch (this.type) { case 'delayed': pathObj.startAt = this.delayUnit * i; pathObj.duration = this.duration - this.delay; break; case 'oneByOne': pathObj.startAt = lengthMeter / totalLength * this.duration; pathObj.duration = pathObj.length / totalLength * this.duration; break; case 'sync': case 'async': case 'nsync': pathObj.startAt = 0; pathObj.duration = this.duration; break; case 'scenario-sync': path = pathObj.el; pAttrs = this.parseAttr(path); pathObj.startAt = timePoint + (parsePositiveInt(pAttrs['data-delay'], this.delayUnit) || 0); pathObj.duration = parsePositiveInt(pAttrs['data-duration'], this.duration); timePoint = pAttrs['data-async'] !== undefined ? pathObj.startAt : pathObj.startAt + pathObj.duration; this.frameLength = Math.max(this.frameLength, (pathObj.startAt + pathObj.duration)); break; case 'scenario': path = pathObj.el; pAttrs = this.parseAttr(path); pathObj.startAt = parsePositiveInt(pAttrs['data-start'], this.delayUnit) || 0; pathObj.duration = parsePositiveInt(pAttrs['data-duration'], this.duration); this.frameLength = Math.max(this.frameLength, (pathObj.startAt + pathObj.duration)); break; } lengthMeter += pathObj.length; this.frameLength = this.frameLength || this.duration; } }; /** * Interval method to draw the SVG from current * position of the animation. It update the value of * `currentFrame` and re-trace the SVG. * * It use this.handle to store the requestAnimationFrame * and clear it one the animation is stopped. So this * attribute can be used to know if the animation is * playing. * * Once the animation at the end, this method will * trigger the Vivus callback. * */ Vivus.prototype.drawer = function () { var self = this; this.currentFrame += this.speed; if (this.currentFrame <= 0) { this.stop(); this.reset(); } else if (this.currentFrame >= this.frameLength) { this.stop(); this.currentFrame = this.frameLength; this.trace(); if (this.selfDestroy) { this.destroy(); } } else { this.trace(); this.handle = requestAnimFrame(function () { self.drawer(); }); return; } this.callback(this); if (this.instanceCallback) { this.instanceCallback(this); this.instanceCallback = null; } }; /** * Draw the SVG at the current instant from the * `currentFrame` value. Here is where most of the magic is. * The trick is to use the `strokeDashoffset` style property. * * For optimisation reasons, a new property called `progress` * is added in each item of `map`. This one contain the current * progress of the path element. Only if the new value is different * the new value will be applied to the DOM element. This * method save a lot of resources to re-render the SVG. And could * be improved if the animation couldn't be played forward. * */ Vivus.prototype.trace = function () { var i, progress, path, currentFrame; currentFrame = this.animTimingFunction(this.currentFrame / this.frameLength) * this.frameLength; for (i = 0; i < this.map.length; i++) { path = this.map[i]; progress = (currentFrame - path.startAt) / path.duration; progress = this.pathTimingFunction(Math.max(0, Math.min(1, progress))); if (path.progress !== progress) { path.progress = progress; path.el.style.strokeDashoffset = Math.floor(path.length * (1 - progress)); this.renderPath(i); } } }; /** * Method forcing the browser to re-render a path element * from it's index in the map. Depending on the `forceRender` * value. * The trick is to replace the path element by it's clone. * This practice is not recommended because it's asking more * ressources, too much DOM manupulation.. * but it's the only way to let the magic happen on IE. * By default, this fallback is only applied on IE. * * @param {Number} index Path index */ Vivus.prototype.renderPath = function (index) { if (this.forceRender && this.map && this.map[index]) { var pathObj = this.map[index], newPath = pathObj.el.cloneNode(true); pathObj.el.parentNode.replaceChild(newPath, pathObj.el); pathObj.el = newPath; } }; /** * When the SVG object is loaded and ready, * this method will continue the initialisation. * * This this mainly due to the case of passing an * object tag in the constructor. It will wait * the end of the loading to initialise. * */ Vivus.prototype.init = function () { // Set object variables this.frameLength = 0; this.currentFrame = 0; this.map = []; // Start new Pathformer(this.el); this.mapping(); this.starter(); if (this.onReady) { this.onReady(this); } }; /** * Trigger to start of the animation. * Depending on the `start` value, a different script * will be applied. * * If the `start` value is not valid, an error will be thrown. * Even if technically, this is impossible. * */ Vivus.prototype.starter = function () { switch (this.start) { case 'manual': return; case 'autostart': this.play(); break; case 'inViewport': var self = this, listener = function () { if (self.isInViewport(self.parentEl, 1)) { self.play(); window.removeEventListener('scroll', listener); //Uncode addition window.removeEventListener('fp-slide-changed', listener); window.removeEventListener('fp-slide-scroll', listener); //#END } }; window.addEventListener('scroll', listener); //Uncode addition window.addEventListener('fp-slide-changed', listener); window.addEventListener('fp-slide-scroll', listener); //#END listener(); break; } }; /** * Controls ************************************** */ /** * Get the current status of the animation between * three different states: 'start', 'progress', 'end'. * @return {string} Instance status */ Vivus.prototype.getStatus = function () { return this.currentFrame === 0 ? 'start' : this.currentFrame === this.frameLength ? 'end' : 'progress'; }; /** * Reset the instance to the initial state : undraw * Be careful, it just reset the animation, if you're * playing the animation, this won't stop it. But just * make it start from start. * */ Vivus.prototype.reset = function () { return this.setFrameProgress(0); }; /** * Set the instance to the final state : drawn * Be careful, it just set the animation, if you're * playing the animation on rewind, this won't stop it. * But just make it start from the end. * */ Vivus.prototype.finish = function () { return this.setFrameProgress(1); }; /** * Set the level of progress of the drawing. * * @param {number} progress Level of progress to set */ Vivus.prototype.setFrameProgress = function (progress) { progress = Math.min(1, Math.max(0, progress)); this.currentFrame = Math.round(this.frameLength * progress); this.trace(); return this; }; /** * Play the animation at the desired speed. * Speed must be a valid number (no zero). * By default, the speed value is 1. * But a negative value is accepted to go forward. * * And works with float too. * But don't forget we are in JavaScript, se be nice * with him and give him a 1/2^x value. * * @param {number} speed Animation speed [optional] */ Vivus.prototype.play = function (speed, callback) { this.instanceCallback = null; if (speed && typeof speed === 'function') { this.instanceCallback = speed; // first parameter is actually the callback function speed = null; } else if (speed && typeof speed !== 'number') { throw new Error('Vivus [play]: invalid speed'); } // if the first parameter wasn't the callback, check if the seconds was if (callback && typeof(callback) === 'function' && !this.instanceCallback) { this.instanceCallback = callback; } this.speed = speed || 1; //Uncode addition if (!this.handle) { var $this = this, delay = (this.delayStart != null) ? this.delayStart : 0; setTimeout(function() { $this.drawer(); }, delay); } //#END return this; }; /** * Stop the current animation, if on progress. * Should not trigger any error. * */ Vivus.prototype.stop = function () { if (this.handle) { cancelAnimFrame(this.handle); this.handle = null; } return this; }; /** * Destroy the instance. * Remove all bad styling attributes on all * path tags * */ Vivus.prototype.destroy = function () { this.stop(); var i, path; for (i = 0; i < this.map.length; i++) { path = this.map[i]; path.el.style.strokeDashoffset = null; path.el.style.strokeDasharray = null; this.renderPath(i); } }; /** * Utils methods * include methods from Codrops ************************************** */ /** * Method to best guess if a path should added into * the animation or not. * * 1. Use the `data-vivus-ignore` attribute if set * 2. Check if the instance must ignore invisible paths * 3. Check if the path is visible * * For now the visibility checking is unstable. * It will be used for a beta phase. * * Other improvments are planned. Like detecting * is the path got a stroke or a valid opacity. */ Vivus.prototype.isInvisible = function (el) { var rect, ignoreAttr = el.getAttribute('data-ignore'); if (ignoreAttr !== null) { return ignoreAttr !== 'false'; } if (this.ignoreInvisible) { rect = el.getBoundingClientRect(); return !rect.width && !rect.height; } else { return false; } }; /** * Parse attributes of a DOM element to * get an object of {attributeName => attributeValue} * * @param {object} element DOM element to parse * @return {object} Object of attributes */ Vivus.prototype.parseAttr = function (element) { var attr, output = {}; if (element && element.attributes) { for (var i = 0; i < element.attributes.length; i++) { attr = element.attributes[i]; output[attr.name] = attr.value; } } return output; }; /** * Reply if an element is in the page viewport * * @param {object} el Element to observe * @param {number} h Percentage of height * @return {boolean} */ Vivus.prototype.isInViewport = function (el, h) { var scrolled = this.scrollY(), viewed = scrolled + this.getViewportH(), elBCR = el.getBoundingClientRect(), elHeight = elBCR.height, elTop = scrolled + elBCR.top, elBottom = elTop + elHeight; // if 0, the element is considered in the viewport as soon as it enters. // if 1, the element is considered in the viewport only when it's fully inside // value in percentage (1 >= h >= 0) h = h || 0; return (elTop + elHeight * h) <= viewed && (elBottom) >= scrolled; }; /** * Get the viewport height in pixels * * @return {integer} Viewport height */ Vivus.prototype.getViewportH = function () { var client = this.docElem.clientHeight, inner = window.innerHeight; if (client < inner) { return inner; } else { return client; } }; /** * Get the page Y offset * * @return {integer} Page Y offset */ Vivus.prototype.scrollY = function () { return window.pageYOffset || this.docElem.scrollTop; }; setupEnv = function () { if (Vivus.prototype.docElem) { return; } /** * Alias for document element * * @type {DOMelement} */ Vivus.prototype.docElem = window.document.documentElement; /** * Alias for `requestAnimationFrame` or * `setTimeout` function for deprecated browsers. * */ requestAnimFrame = (function () { return ( window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(/* function */ callback){ return window.setTimeout(callback, 1000 / 60); } ); })(); /** * Alias for `cancelAnimationFrame` or * `cancelTimeout` function for deprecated browsers. * */ cancelAnimFrame = (function () { return ( window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function(id){ return window.clearTimeout(id); } ); })(); }; /** * Parse string to integer. * If the number is not positive or null * the method will return the default value * or 0 if undefined * * @param {string} value String to parse * @param {*} defaultValue Value to return if the result parsed is invalid * @return {number} * */ parsePositiveInt = function (value, defaultValue) { var output = parseInt(value, 10); return (output >= 0) ? output : defaultValue; }; if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define([], function() { return Vivus; }); } else if (typeof exports === 'object') { // Node. Does not work with strict CommonJS, but // only CommonJS-like environments that support module.exports, // like Node. module.exports = Vivus; } else { // Browser globals window.Vivus = Vivus; } }()); (function(global){var startY=0;var enabled=false;var supportsPassiveOption=false;try{var opts=Object.defineProperty({},"passive",{get:function(){supportsPassiveOption=true}});window.addEventListener("test",null,opts)}catch(e){}var handleTouchmove=function(evt){var el=evt.target;while(el!==document.body&&el!==document){var style=window.getComputedStyle(el);if(!style){break}if(el.nodeName==="INPUT"&&el.getAttribute("type")==="range"){return}var scrolling=style.getPropertyValue("-webkit-overflow-scrolling");var overflowY=style.getPropertyValue("overflow-y");var height=parseInt(style.getPropertyValue("height"),10);var isScrollable=scrolling==="touch"&&(overflowY==="auto"||overflowY==="scroll");var canScroll=el.scrollHeight>el.offsetHeight;if(isScrollable&&canScroll){var curY=evt.touches?evt.touches[0].screenY:evt.screenY;var isAtTop=startY<=curY&&el.scrollTop===0;var isAtBottom=startY>=curY&&el.scrollHeight-el.scrollTop===height;if(isAtTop||isAtBottom){evt.preventDefault()}return}el=el.parentNode}evt.preventDefault()};var handleTouchstart=function(evt){startY=evt.touches?evt.touches[0].screenY:evt.screenY};var enable=function(){window.addEventListener("touchstart",handleTouchstart,supportsPassiveOption?{passive:false}:false);window.addEventListener("touchmove",handleTouchmove,supportsPassiveOption?{passive:false}:false);enabled=true};var disable=function(){window.removeEventListener("touchstart",handleTouchstart,false);window.removeEventListener("touchmove",handleTouchmove,false);enabled=false};var isEnabled=function(){return enabled};var testDiv=document.createElement("div");document.documentElement.appendChild(testDiv);testDiv.style.WebkitOverflowScrolling="touch";var scrollSupport="getComputedStyle"in window&&window.getComputedStyle(testDiv)["-webkit-overflow-scrolling"]==="touch";document.documentElement.removeChild(testDiv);if(scrollSupport){enable()}var iNoBounce={enable:enable,disable:disable,isEnabled:isEnabled};if(typeof module!=="undefined"&&module.exports){module.exports=iNoBounce}if(typeof global.define==="function"){(function(define){define("iNoBounce",[],function(){return iNoBounce})})(global.define)}else{global.iNoBounce=iNoBounce}})(this); iNoBounce.disable(); /* Font Face Observer v2.1.0 - © Bram Stein. License: BSD-3-Clause */(function(){function l(a,b){document.addEventListener?a.addEventListener("scroll",b,!1):a.attachEvent("scroll",b)}function m(a){document.body?a():document.addEventListener?document.addEventListener("DOMContentLoaded",function c(){document.removeEventListener("DOMContentLoaded",c);a()}):document.attachEvent("onreadystatechange",function k(){if("interactive"==document.readyState||"complete"==document.readyState)document.detachEvent("onreadystatechange",k),a()})};function t(a){this.a=document.createElement("div");this.a.setAttribute("aria-hidden","true");this.a.appendChild(document.createTextNode(a));this.b=document.createElement("span");this.c=document.createElement("span");this.h=document.createElement("span");this.f=document.createElement("span");this.g=-1;this.b.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.c.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;"; this.f.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.h.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c)} function u(a,b){a.a.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+b+";"}function z(a){var b=a.a.offsetWidth,c=b+100;a.f.style.width=c+"px";a.c.scrollLeft=c;a.b.scrollLeft=a.b.scrollWidth+100;return a.g!==b?(a.g=b,!0):!1}function A(a,b){function c(){var a=k;z(a)&&a.a.parentNode&&b(a.g)}var k=a;l(a.b,c);l(a.c,c);z(a)};function B(a,b){var c=b||{};this.family=a;this.style=c.style||"normal";this.weight=c.weight||"normal";this.stretch=c.stretch||"normal"}var C=null,D=null,E=null,F=null;function G(){if(null===D)if(J()&&/Apple/.test(window.navigator.vendor)){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);D=!!a&&603>parseInt(a[1],10)}else D=!1;return D}function J(){null===F&&(F=!!document.fonts);return F} function K(){if(null===E){var a=document.createElement("div");try{a.style.font="condensed 100px sans-serif"}catch(b){}E=""!==a.style.font}return E}function L(a,b){return[a.style,a.weight,K()?a.stretch:"","100px",b].join(" ")} B.prototype.load=function(a,b){var c=this,k=a||"BESbswy",r=0,n=b||3E3,H=(new Date).getTime();return new Promise(function(a,b){if(J()&&!G()){var M=new Promise(function(a,b){function e(){(new Date).getTime()-H>=n?b(Error(""+n+"ms timeout exceeded")):document.fonts.load(L(c,'"'+c.family+'"'),k).then(function(c){1<=c.length?a():setTimeout(e,25)},b)}e()}),N=new Promise(function(a,c){r=setTimeout(function(){c(Error(""+n+"ms timeout exceeded"))},n)});Promise.race([N,M]).then(function(){clearTimeout(r);a(c)}, b)}else m(function(){function v(){var b;if(b=-1!=f&&-1!=g||-1!=f&&-1!=h||-1!=g&&-1!=h)(b=f!=g&&f!=h&&g!=h)||(null===C&&(b=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),C=!!b&&(536>parseInt(b[1],10)||536===parseInt(b[1],10)&&11>=parseInt(b[2],10))),b=C&&(f==w&&g==w&&h==w||f==x&&g==x&&h==x||f==y&&g==y&&h==y)),b=!b;b&&(d.parentNode&&d.parentNode.removeChild(d),clearTimeout(r),a(c))}function I(){if((new Date).getTime()-H>=n)d.parentNode&&d.parentNode.removeChild(d),b(Error(""+ n+"ms timeout exceeded"));else{var a=document.hidden;if(!0===a||void 0===a)f=e.a.offsetWidth,g=p.a.offsetWidth,h=q.a.offsetWidth,v();r=setTimeout(I,50)}}var e=new t(k),p=new t(k),q=new t(k),f=-1,g=-1,h=-1,w=-1,x=-1,y=-1,d=document.createElement("div");d.dir="ltr";u(e,L(c,"sans-serif"));u(p,L(c,"serif"));u(q,L(c,"monospace"));d.appendChild(e.a);d.appendChild(p.a);d.appendChild(q.a);document.body.appendChild(d);w=e.a.offsetWidth;x=p.a.offsetWidth;y=q.a.offsetWidth;I();A(e,function(a){f=a;v()});u(e, L(c,'"'+c.family+'",sans-serif'));A(p,function(a){g=a;v()});u(p,L(c,'"'+c.family+'",serif'));A(q,function(a){h=a;v()});u(q,L(c,'"'+c.family+'",monospace'))})})};"object"===typeof module?module.exports=B:(window.FontFaceObserver=B,window.FontFaceObserver.prototype.load=B.prototype.load);}()); // source --> https://bateaulerivegauche.fr/wp-content/plugins/aky-gdpr-master/public/resources/vendor/tarteaucitronjs/tarteaucitron.js /*jslint browser: true, evil: true */ var tarteaucitronForceCDN = "https://cdn.jsdelivr.net/gh/AmauriC/tarteaucitron.js@V1.2/"; // define correct path for files inclusion var scripts = document.getElementsByTagName('script'), path = scripts[scripts.length - 1].src.split('?')[0], tarteaucitronForceCDN = (tarteaucitronForceCDN === undefined) ? '' : tarteaucitronForceCDN, cdn = (tarteaucitronForceCDN === '') ? path.split('/').slice(0, -1).join('/') + '/' : tarteaucitronForceCDN, alreadyLaunch = (alreadyLaunch === undefined) ? 0 : alreadyLaunch, tarteaucitronForceLanguage = (tarteaucitronForceLanguage === undefined) ? '' : tarteaucitronForceLanguage, tarteaucitronForceExpire = (tarteaucitronForceExpire === undefined) ? '' : tarteaucitronForceExpire, tarteaucitronCustomText = (tarteaucitronCustomText === undefined) ? '' : tarteaucitronCustomText, timeExipre = 31536000000, tarteaucitronProLoadServices, tarteaucitronNoAdBlocker = false; var tarteaucitron = { "version": 20181023, "cdn": cdn, "user": {}, "lang": {}, "services": {}, "added": [], "idprocessed": [], "state": [], "launch": [], "parameters": {}, "isAjax": false, "reloadThePage": false, "events": { "init": function () {}, "load": function () {}, }, "init": function (params) { "use strict"; var origOpen; tarteaucitron.parameters = params; if (alreadyLaunch === 0) { alreadyLaunch = 1; if (window.addEventListener) { window.addEventListener("load", function () { tarteaucitron.load(); tarteaucitron.fallback(['tarteaucitronOpenPanel'], function (elem) { elem.addEventListener("click", function (event) { tarteaucitron.userInterface.openPanel(); event.preventDefault(); }, false); }, true); }, false); window.addEventListener("scroll", function () { var scrollPos = window.pageYOffset || document.documentElement.scrollTop, heightPosition; if (document.getElementById('tarteaucitronAlertBig') !== null && !tarteaucitron.highPrivacy) { if (document.getElementById('tarteaucitronAlertBig').style.display === 'block') { heightPosition = document.getElementById('tarteaucitronAlertBig').offsetHeight + 'px'; if (scrollPos > (screen.height * 2)) { tarteaucitron.userInterface.respondAll(true); } else if (scrollPos > (screen.height / 2)) { document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '' + tarteaucitron.lang.alertBigScroll + ' ' + tarteaucitron.lang.alertBig; } if (tarteaucitron.orientation === 'top') { document.getElementById('tarteaucitronPercentage').style.top = heightPosition; } else { document.getElementById('tarteaucitronPercentage').style.bottom = heightPosition; } document.getElementById('tarteaucitronPercentage').style.width = ((100 / (screen.height * 2)) * scrollPos) + '%'; } } }, false); window.addEventListener("keydown", function (evt) { if (evt.keyCode === 27) { tarteaucitron.userInterface.closePanel(); } }, false); window.addEventListener("hashchange", function () { if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') { tarteaucitron.userInterface.openPanel(); } }, false); window.addEventListener("resize", function () { if (document.getElementById('tarteaucitron') !== null) { if (document.getElementById('tarteaucitron').style.display === 'block') { tarteaucitron.userInterface.jsSizing('main'); } } if (document.getElementById('tarteaucitronCookiesListContainer') !== null) { if (document.getElementById('tarteaucitronCookiesListContainer').style.display === 'block') { tarteaucitron.userInterface.jsSizing('cookie'); } } }, false); } else { window.attachEvent("onload", function () { tarteaucitron.load(); tarteaucitron.fallback(['tarteaucitronOpenPanel'], function (elem) { elem.attachEvent("onclick", function (event) { tarteaucitron.userInterface.openPanel(); event.preventDefault(); }); }, true); }); window.attachEvent("onscroll", function () { var scrollPos = window.pageYOffset || document.documentElement.scrollTop, heightPosition; if (document.getElementById('tarteaucitronAlertBig') !== null && !tarteaucitron.highPrivacy) { if (document.getElementById('tarteaucitronAlertBig').style.display === 'block') { heightPosition = document.getElementById('tarteaucitronAlertBig').offsetHeight + 'px'; if (scrollPos > (screen.height * 2)) { tarteaucitron.userInterface.respondAll(true); } else if (scrollPos > (screen.height / 2)) { document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '' + tarteaucitron.lang.alertBigScroll + ' ' + tarteaucitron.lang.alertBig; } if (tarteaucitron.orientation === 'top') { document.getElementById('tarteaucitronPercentage').style.top = heightPosition; } else { document.getElementById('tarteaucitronPercentage').style.bottom = heightPosition; } document.getElementById('tarteaucitronPercentage').style.width = ((100 / (screen.height * 2)) * scrollPos) + '%'; } } }); window.attachEvent("onkeydown", function (evt) { if (evt.keyCode === 27) { tarteaucitron.userInterface.closePanel(); } if ( evt.keyCode === 9 && focusableEls.indexOf(evt.target) >= 0) { if ( evt.shiftKey ) /* shift + tab */ { if (document.activeElement === firstFocusableEl) { lastFocusableEl.focus(); evt.preventDefault(); } } else /* tab */ { if (document.activeElement === lastFocusableEl) { firstFocusableEl.focus(); evt.preventDefault(); } } } }); window.attachEvent("onhashchange", function () { if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') { tarteaucitron.userInterface.openPanel(); } }); window.attachEvent("onresize", function () { if (document.getElementById('tarteaucitron') !== null) { if (document.getElementById('tarteaucitron').style.display === 'block') { tarteaucitron.userInterface.jsSizing('main'); } } if (document.getElementById('tarteaucitronCookiesListContainer') !== null) { if (document.getElementById('tarteaucitronCookiesListContainer').style.display === 'block') { tarteaucitron.userInterface.jsSizing('cookie'); } } }); } if (typeof XMLHttpRequest !== 'undefined') { origOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function () { if (window.addEventListener) { this.addEventListener("load", function () { if (typeof tarteaucitronProLoadServices === 'function') { tarteaucitronProLoadServices(); } }, false); } else if (typeof this.attachEvent !== 'undefined') { this.attachEvent("onload", function () { if (typeof tarteaucitronProLoadServices === 'function') { tarteaucitronProLoadServices(); } }); } else { if (typeof tarteaucitronProLoadServices === 'function') { setTimeout(tarteaucitronProLoadServices, 1000); } } try { origOpen.apply(this, arguments); } catch (err) {} }; } } if(tarteaucitron.events.init) { tarteaucitron.events.init(); } }, "load": function () { "use strict"; var cdn = tarteaucitron.cdn, language = tarteaucitron.getLanguage(), pathToLang = cdn + 'lang/tarteaucitron.' + language + '.js?v=' + tarteaucitron.version, pathToServices = cdn + 'tarteaucitron.services.js?v=' + tarteaucitron.version, linkElement = document.createElement('link'), defaults = { "adblocker": false, "hashtag": '#tarteaucitron', "cookieName": 'tarteaucitron', "highPrivacy": false, "orientation": "top", "removeCredit": false, "showAlertSmall": true, "cookieslist": true, "handleBrowserDNTRequest": false, "AcceptAllCta" : false, "moreInfoLink": true, "privacyUrl": "", "useExternalCss": false }, params = tarteaucitron.parameters; // Step 0: get params if (params !== undefined) { for (var k in defaults) { if(!tarteaucitron.parameters.hasOwnProperty(k)) { tarteaucitron.parameters[k] = defaults[k]; } } } // global tarteaucitron.orientation = tarteaucitron.parameters.orientation; tarteaucitron.hashtag = tarteaucitron.parameters.hashtag; tarteaucitron.highPrivacy = tarteaucitron.parameters.highPrivacy; tarteaucitron.handleBrowserDNTRequest = tarteaucitron.parameters.handleBrowserDNTRequest; // Step 1: load css if ( !tarteaucitron.parameters.useExternalCss ) { linkElement.rel = 'stylesheet'; linkElement.type = 'text/css'; linkElement.href = cdn + 'css/tarteaucitron.css?v=' + tarteaucitron.version; document.getElementsByTagName('head')[0].appendChild(linkElement); } // Step 2: load language and services tarteaucitron.addScript(pathToLang, '', function () { if(tarteaucitronCustomText !== ''){ tarteaucitron.lang = tarteaucitron.AddOrUpdate(tarteaucitron.lang, tarteaucitronCustomText); } tarteaucitron.addScript(pathToServices, '', function () { var body = document.body, div = document.createElement('div'), html = '', index, orientation = 'Top', cat = ['ads', 'analytic', 'api', 'comment', 'social', 'support', 'video', 'other'], i; cat = cat.sort(function (a, b) { if (tarteaucitron.lang[a].title > tarteaucitron.lang[b].title) { return 1; } if (tarteaucitron.lang[a].title < tarteaucitron.lang[b].title) { return -1; } return 0; }); // Step 3: prepare the html html += '
'; html += ''; html += ''; if (tarteaucitron.parameters.orientation === 'bottom') { orientation = 'Bottom'; } if (tarteaucitron.parameters.highPrivacy && !tarteaucitron.parameters.AcceptAllCta) { html += '
'; html += ' '; html += ' ' + tarteaucitron.lang.alertBigPrivacy; html += ' '; html += ' '; if (tarteaucitron.parameters.privacyUrl !== "") { html += ' '; } html += '
'; } else { html += '
'; html += ' '; if (tarteaucitron.parameters.highPrivacy) { html += ' ' + tarteaucitron.lang.alertBigPrivacy; } else { html += ' ' + tarteaucitron.lang.alertBigClick + ' ' + tarteaucitron.lang.alertBig; } html += ' '; html += ' '; html += ' '; if (tarteaucitron.parameters.privacyUrl !== "") { html += ' '; } html += '
'; html += '
'; } if (tarteaucitron.parameters.showAlertSmall === true) { html += '
'; html += ' '; html += '
'; html += ' '; html += '
'; html += ' 0 cookie'; html += '
'; html += '
'; html += '
'; } else { html += '
'; } html += ''; } tarteaucitron.addScript(tarteaucitron.cdn + 'advertising.js?v=' + tarteaucitron.version, '', function () { if (tarteaucitronNoAdBlocker === true || tarteaucitron.parameters.adblocker === false) { // create a wrapper container at the same level than tarteaucitron so we can add an aria-hidden when tarteaucitron is opened /*var wrapper = document.createElement('div'); wrapper.id = "contentWrapper"; while (document.body.firstChild) { wrapper.appendChild(document.body.firstChild); } // Append the wrapper to the body document.body.appendChild(wrapper);*/ div.id = 'tarteaucitronRoot'; body.appendChild(div, body); div.innerHTML = html; if (tarteaucitron.job !== undefined) { tarteaucitron.job = tarteaucitron.cleanArray(tarteaucitron.job); for (index = 0; index < tarteaucitron.job.length; index += 1) { tarteaucitron.addService(tarteaucitron.job[index]); } } else { tarteaucitron.job = [] } tarteaucitron.isAjax = true; tarteaucitron.job.push = function (id) { // ie <9 hack if (typeof tarteaucitron.job.indexOf === 'undefined') { tarteaucitron.job.indexOf = function (obj, start) { var i, j = this.length; for (i = (start || 0); i < j; i += 1) { if (this[i] === obj) { return i; } } return -1; }; } if (tarteaucitron.job.indexOf(id) === -1) { Array.prototype.push.call(this, id); } tarteaucitron.launch[id] = false; tarteaucitron.addService(id); }; if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') { tarteaucitron.userInterface.openPanel(); } tarteaucitron.cookie.number(); setInterval(tarteaucitron.cookie.number, 60000); } }, tarteaucitron.parameters.adblocker); if (tarteaucitron.parameters.adblocker === true) { setTimeout(function () { if (tarteaucitronNoAdBlocker === false) { html = ''; html += '
'; // create wrapper container /*var wrapper = document.createElement('div'); wrapper.id = "contentWrapper"; while (document.body.firstChild) { wrapper.appendChild(document.body.firstChild); } // Append the wrapper to the body document.body.appendChild(wrapper);*/ div.id = 'tarteaucitronRoot'; body.appendChild(div, body); div.innerHTML = html; tarteaucitron.pro('!adblocker=true'); } else { tarteaucitron.pro('!adblocker=false'); } }, 1500); } }); }); if(tarteaucitron.events.load) { tarteaucitron.events.load(); } }, "addService": function (serviceId) { "use strict"; var html = '', s = tarteaucitron.services, service = s[serviceId], cookie = tarteaucitron.cookie.read(), hostname = document.location.hostname, hostRef = document.referrer.split('/')[2], isNavigating = (hostRef === hostname && window.location.href !== tarteaucitron.parameters.privacyUrl) ? true : false, isAutostart = (!service.needConsent) ? true : false, isWaiting = (cookie.indexOf(service.key + '=wait') >= 0) ? true : false, isDenied = (cookie.indexOf(service.key + '=false') >= 0) ? true : false, isAllowed = (cookie.indexOf(service.key + '=true') >= 0) ? true : false, isResponded = (cookie.indexOf(service.key + '=false') >= 0 || cookie.indexOf(service.key + '=true') >= 0) ? true : false, isDNTRequested = (navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1" || window.doNotTrack === "1") ? true : false; if (tarteaucitron.added[service.key] !== true) { tarteaucitron.added[service.key] = true; html += '
  • '; html += '
    '; html += ' ' + service.name + ''; html += '
    '; if (tarteaucitron.parameters.moreInfoLink == true) { html += ' '; html += ' ' + tarteaucitron.lang.more; html += ' '; html += ' - '; html += ' '; html += ' ' + tarteaucitron.lang.source; html += ' '; } html += '
    '; html += '
    '; html += ' '; html += ' '; html += '
    '; html += '
  • '; tarteaucitron.userInterface.css('tarteaucitronServicesTitle_' + service.type, 'display', 'block'); if (document.getElementById('tarteaucitronServices_' + service.type) !== null) { document.getElementById('tarteaucitronServices_' + service.type).innerHTML += html; } tarteaucitron.userInterface.order(service.type); } // allow by default for non EU if (isResponded === false && tarteaucitron.user.bypass === true) { isAllowed = true; tarteaucitron.cookie.create(service.key, true); } if ((!isResponded && (isAutostart || (isNavigating && isWaiting)) && !tarteaucitron.highPrivacy) || isAllowed) { if (!isAllowed) { tarteaucitron.cookie.create(service.key, true); } if (tarteaucitron.launch[service.key] !== true) { tarteaucitron.launch[service.key] = true; service.js(); } tarteaucitron.state[service.key] = true; tarteaucitron.userInterface.color(service.key, true); } else if (isDenied) { if (typeof service.fallback === 'function') { service.fallback(); } tarteaucitron.state[service.key] = false; tarteaucitron.userInterface.color(service.key, false); } else if (!isResponded && isDNTRequested && tarteaucitron.handleBrowserDNTRequest) { tarteaucitron.cookie.create(service.key, 'false'); if (typeof service.fallback === 'function') { service.fallback(); } tarteaucitron.state[service.key] = false; tarteaucitron.userInterface.color(service.key, false); } else if (!isResponded) { tarteaucitron.cookie.create(service.key, 'wait'); if (typeof service.fallback === 'function') { service.fallback(); } tarteaucitron.userInterface.color(service.key, 'wait'); tarteaucitron.userInterface.openAlert(); } tarteaucitron.cookie.checkCount(service.key); }, "cleanArray": function cleanArray(arr) { "use strict"; var i, len = arr.length, out = [], obj = {}, s = tarteaucitron.services; for (i = 0; i < len; i += 1) { if (!obj[arr[i]]) { obj[arr[i]] = {}; if (tarteaucitron.services[arr[i]] !== undefined) { out.push(arr[i]); } } } out = out.sort(function (a, b) { if (s[a].type + s[a].key > s[b].type + s[b].key) { return 1; } if (s[a].type + s[a].key < s[b].type + s[b].key) { return -1; } return 0; }); return out; }, "userInterface": { "css": function (id, property, value) { "use strict"; if (document.getElementById(id) !== null) { document.getElementById(id).style[property] = value; } }, "respondAll": function (status) { "use strict"; var s = tarteaucitron.services, service, key, index = 0; for (index = 0; index < tarteaucitron.job.length; index += 1) { service = s[tarteaucitron.job[index]]; key = service.key; if (tarteaucitron.state[key] !== status) { if (status === false && tarteaucitron.launch[key] === true) { tarteaucitron.reloadThePage = true; } if (tarteaucitron.launch[key] !== true && status === true) { tarteaucitron.launch[key] = true; tarteaucitron.services[key].js(); } tarteaucitron.state[key] = status; tarteaucitron.cookie.create(key, status); tarteaucitron.userInterface.color(key, status); } } }, "respond": function (el, status) { "use strict"; var key = el.id.replace(new RegExp("(Eng[0-9]+|Allow|Deni)ed", "g"), ''); // return if same state if (tarteaucitron.state[key] === status) { return; } if (status === false && tarteaucitron.launch[key] === true) { tarteaucitron.reloadThePage = true; } // if not already launched... launch the service if (status === true) { if (tarteaucitron.launch[key] !== true) { tarteaucitron.launch[key] = true; tarteaucitron.services[key].js(); } } tarteaucitron.state[key] = status; tarteaucitron.cookie.create(key, status); tarteaucitron.userInterface.color(key, status); }, "color": function (key, status) { "use strict"; var gray = '#808080', greenDark = '#1B870B', greenLight = '#E6FFE2', redDark = '#9C1A1A', redLight = '#FFE2E2', yellowDark = '#FBDA26', c = 'tarteaucitron', nbDenied = 0, nbPending = 0, nbAllowed = 0, sum = tarteaucitron.job.length, index; if (status === true) { tarteaucitron.userInterface.css(key + 'Line', 'borderLeft', '5px solid ' + greenDark); tarteaucitron.userInterface.css(key + 'Allowed', 'backgroundColor', greenDark); tarteaucitron.userInterface.css(key + 'Denied', 'backgroundColor', gray); document.getElementById(key + 'Line').classList.add('tarteaucitronIsAllowed'); document.getElementById(key + 'Line').classList.remove('tarteaucitronIsDenied'); } else if (status === false) { tarteaucitron.userInterface.css(key + 'Line', 'borderLeft', '5px solid ' + redDark); tarteaucitron.userInterface.css(key + 'Allowed', 'backgroundColor', gray); tarteaucitron.userInterface.css(key + 'Denied', 'backgroundColor', redDark); document.getElementById(key + 'Line').classList.remove('tarteaucitronIsAllowed'); document.getElementById(key + 'Line').classList.add('tarteaucitronIsDenied'); } // check if all services are allowed for (index = 0; index < sum; index += 1) { if (tarteaucitron.state[tarteaucitron.job[index]] === false) { nbDenied += 1; } else if (tarteaucitron.state[tarteaucitron.job[index]] === undefined) { nbPending += 1; } else if (tarteaucitron.state[tarteaucitron.job[index]] === true) { nbAllowed += 1; } } tarteaucitron.userInterface.css(c + 'DotGreen', 'width', ((100 / sum) * nbAllowed) + '%'); tarteaucitron.userInterface.css(c + 'DotYellow', 'width', ((100 / sum) * nbPending) + '%'); tarteaucitron.userInterface.css(c + 'DotRed', 'width', ((100 / sum) * nbDenied) + '%'); if (nbDenied === 0 && nbPending === 0) { tarteaucitron.userInterface.css(c + 'AllAllowed', 'backgroundColor', greenDark); tarteaucitron.userInterface.css(c + 'AllDenied', 'opacity', '0.4'); tarteaucitron.userInterface.css(c + 'AllAllowed', 'opacity', '1'); } else if (nbAllowed === 0 && nbPending === 0) { tarteaucitron.userInterface.css(c + 'AllAllowed', 'opacity', '0.4'); tarteaucitron.userInterface.css(c + 'AllDenied', 'opacity', '1'); tarteaucitron.userInterface.css(c + 'AllDenied', 'backgroundColor', redDark); } else { tarteaucitron.userInterface.css(c + 'AllAllowed', 'opacity', '0.4'); tarteaucitron.userInterface.css(c + 'AllDenied', 'opacity', '0.4'); } // close the alert if all service have been reviewed if (nbPending === 0) { tarteaucitron.userInterface.closeAlert(); } if (tarteaucitron.services[key].cookies.length > 0 && status === false) { tarteaucitron.cookie.purge(tarteaucitron.services[key].cookies); } if (status === true) { if (document.getElementById('tacCL' + key) !== null) { document.getElementById('tacCL' + key).innerHTML = '...'; } setTimeout(function () { tarteaucitron.cookie.checkCount(key); }, 2500); } else { tarteaucitron.cookie.checkCount(key); } }, "openPanel": function () { "use strict"; tarteaucitron.userInterface.css('tarteaucitron', 'display', 'block'); tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block'); tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none'); document.getElementById('tarteaucitronClosePanel').focus(); //document.getElementById('contentWrapper').setAttribute("aria-hidden", "true"); document.getElementsByTagName('body')[0].classList.add('modal-open'); tarteaucitron.userInterface.focusTrap(); tarteaucitron.userInterface.jsSizing('main'); }, "closePanel": function () { "use strict"; if (document.location.hash === tarteaucitron.hashtag) { document.location.hash = ''; } tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none'); tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none'); tarteaucitron.fallback(['tarteaucitronInfoBox'], function (elem) { elem.style.display = 'none'; }, true); if (tarteaucitron.reloadThePage === true) { window.location.reload(); } else { tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none'); } if (document.getElementById('tarteaucitronCloseAlert') !== null) { document.getElementById('tarteaucitronCloseAlert').focus(); } //document.getElementById('contentWrapper').setAttribute("aria-hidden", "false"); document.getElementsByTagName('body')[0].classList.remove('modal-open'); }, "focusTrap": function() { "use strict"; var focusableEls, firstFocusableEl, lastFocusableEl, filtered; focusableEls = document.getElementById('tarteaucitron').querySelectorAll('a[href], button'); filtered = []; // get only visible items for (var i = 0, max = focusableEls.length; i < max; i++) { if (focusableEls[i].offsetHeight > 0) { filtered.push(focusableEls[i]); } } firstFocusableEl = filtered[0]; lastFocusableEl = filtered[filtered.length - 1]; //loop focus inside tarteaucitron document.getElementById('tarteaucitron').addEventListener("keydown", function (evt) { if ( evt.key === 'Tab' || evt.keyCode === 9 ) { if ( evt.shiftKey ) /* shift + tab */ { if (document.activeElement === firstFocusableEl) { lastFocusableEl.focus(); evt.preventDefault(); } } else /* tab */ { if (document.activeElement === lastFocusableEl) { firstFocusableEl.focus(); evt.preventDefault(); } } } }) }, "openAlert": function () { "use strict"; var c = 'tarteaucitron'; tarteaucitron.userInterface.css(c + 'Percentage', 'display', 'block'); tarteaucitron.userInterface.css(c + 'AlertSmall', 'display', 'none'); tarteaucitron.userInterface.css(c + 'AlertBig', 'display', 'block'); }, "closeAlert": function () { "use strict"; var c = 'tarteaucitron'; tarteaucitron.userInterface.css(c + 'Percentage', 'display', 'none'); tarteaucitron.userInterface.css(c + 'AlertSmall', 'display', 'block'); tarteaucitron.userInterface.css(c + 'AlertBig', 'display', 'none'); tarteaucitron.userInterface.jsSizing('box'); }, "toggleCookiesList": function () { "use strict"; var div = document.getElementById('tarteaucitronCookiesListContainer'); if (div === null) { return; } if (div.style.display !== 'block') { tarteaucitron.cookie.number(); div.style.display = 'block'; tarteaucitron.userInterface.jsSizing('cookie'); tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none'); tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block'); tarteaucitron.fallback(['tarteaucitronInfoBox'], function (elem) { elem.style.display = 'none'; }, true); } else { div.style.display = 'none'; tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none'); tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none'); } }, "toggle": function (id, closeClass) { "use strict"; var div = document.getElementById(id); if (div === null) { return; } if (closeClass !== undefined) { tarteaucitron.fallback([closeClass], function (elem) { if (elem.id !== id) { elem.style.display = 'none'; } }, true); } if (div.style.display !== 'block') { div.style.display = 'block'; } else { div.style.display = 'none'; } }, "order": function (id) { "use strict"; var main = document.getElementById('tarteaucitronServices_' + id), allDivs, store = [], i; if (main === null) { return; } allDivs = main.childNodes; if (typeof Array.prototype.map === 'function') { Array.prototype.map.call(main.children, Object).sort(function (a, b) { //var mainChildren = Array.from(main.children); //mainChildren.sort(function (a, b) { if (tarteaucitron.services[a.id.replace(/Line/g, '')].name > tarteaucitron.services[b.id.replace(/Line/g, '')].name) { return 1; } if (tarteaucitron.services[a.id.replace(/Line/g, '')].name < tarteaucitron.services[b.id.replace(/Line/g, '')].name) { return -1; } return 0; }).forEach(function (element) { main.appendChild(element); }); } }, "jsSizing": function (type) { "use strict"; var scrollbarMarginRight = 10, scrollbarWidthParent, scrollbarWidthChild, servicesHeight, e = window, a = 'inner', windowInnerHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, mainTop, mainHeight, closeButtonHeight, headerHeight, cookiesListHeight, cookiesCloseHeight, cookiesTitleHeight, paddingBox, alertSmallHeight, cookiesNumberHeight; if (type === 'box') { if (document.getElementById('tarteaucitronAlertSmall') !== null && document.getElementById('tarteaucitronCookiesNumber') !== null) { // reset tarteaucitron.userInterface.css('tarteaucitronCookiesNumber', 'padding', '0px 10px'); // calculate alertSmallHeight = document.getElementById('tarteaucitronAlertSmall').offsetHeight; cookiesNumberHeight = document.getElementById('tarteaucitronCookiesNumber').offsetHeight; paddingBox = (alertSmallHeight - cookiesNumberHeight) / 2; // apply tarteaucitron.userInterface.css('tarteaucitronCookiesNumber', 'padding', paddingBox + 'px 10px'); } } else if (type === 'main') { // get the real window width for media query if (window.innerWidth === undefined) { a = 'client'; e = document.documentElement || document.body; } // height of the services list container if (document.getElementById('tarteaucitron') !== null && document.getElementById('tarteaucitronClosePanel') !== null && document.getElementById('tarteaucitronMainLineOffset') !== null) { // reset tarteaucitron.userInterface.css('tarteaucitronServices', 'height', 'auto'); // calculate mainHeight = document.getElementById('tarteaucitron').offsetHeight; closeButtonHeight = document.getElementById('tarteaucitronClosePanel').offsetHeight; // apply servicesHeight = (mainHeight - closeButtonHeight + 2); tarteaucitron.userInterface.css('tarteaucitronServices', 'height', servicesHeight + 'px'); tarteaucitron.userInterface.css('tarteaucitronServices', 'overflow-x', 'auto'); } // align the main allow/deny button depending on scrollbar width if (document.getElementById('tarteaucitronServices') !== null && document.getElementById('tarteaucitronScrollbarChild') !== null) { // media query if (e[a + 'Width'] <= 479) { tarteaucitron.userInterface.css('tarteaucitronScrollbarAdjust', 'marginLeft', '11px'); } else if (e[a + 'Width'] <= 767) { scrollbarMarginRight = 12; } scrollbarWidthParent = document.getElementById('tarteaucitronServices').offsetWidth; scrollbarWidthChild = document.getElementById('tarteaucitronScrollbarChild').offsetWidth; tarteaucitron.userInterface.css('tarteaucitronScrollbarAdjust', 'marginRight', ((scrollbarWidthParent - scrollbarWidthChild) + scrollbarMarginRight) + 'px'); } // center the main panel if (document.getElementById('tarteaucitron') !== null) { // media query if (e[a + 'Width'] <= 767) { mainTop = 0; } else { mainTop = ((windowInnerHeight - document.getElementById('tarteaucitron').offsetHeight) / 2) - 21; } // correct if (mainTop < 0) { mainTop = 0; } if (document.getElementById('tarteaucitronMainLineOffset') !== null) { if (document.getElementById('tarteaucitron').offsetHeight < (windowInnerHeight / 2)) { mainTop -= document.getElementById('tarteaucitronMainLineOffset').offsetHeight; } } // apply tarteaucitron.userInterface.css('tarteaucitron', 'top', mainTop + 'px'); } } else if (type === 'cookie') { // put cookies list at bottom if (document.getElementById('tarteaucitronAlertSmall') !== null) { tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'bottom', (document.getElementById('tarteaucitronAlertSmall').offsetHeight) + 'px'); } // height of cookies list if (document.getElementById('tarteaucitronCookiesListContainer') !== null) { // reset tarteaucitron.userInterface.css('tarteaucitronCookiesList', 'height', 'auto'); // calculate cookiesListHeight = document.getElementById('tarteaucitronCookiesListContainer').offsetHeight; cookiesCloseHeight = document.getElementById('tarteaucitronClosePanelCookie').offsetHeight; cookiesTitleHeight = document.getElementById('tarteaucitronCookiesTitle').offsetHeight; // apply tarteaucitron.userInterface.css('tarteaucitronCookiesList', 'height', (cookiesListHeight - cookiesCloseHeight - cookiesTitleHeight - 2) + 'px'); } } } }, "cookie": { "owner": {}, "create": function (key, status) { "use strict"; if (tarteaucitronForceExpire !== '') { // The number of day cann't be higher than 1 year timeExipre = (tarteaucitronForceExpire > 365) ? 31536000000 : tarteaucitronForceExpire * 86400000; // Multiplication to tranform the number of days to milliseconds } var d = new Date(), time = d.getTime(), expireTime = time + timeExipre, // 365 days regex = new RegExp("!" + key + "=(wait|true|false)", "g"), cookie = tarteaucitron.cookie.read().replace(regex, ""), value = tarteaucitron.parameters.cookieName + '=' + cookie + '!' + key + '=' + status, domain = (tarteaucitron.parameters.cookieDomain !== undefined && tarteaucitron.parameters.cookieDomain !== '') ? 'domain=' + tarteaucitron.parameters.cookieDomain + ';' : ''; if (tarteaucitron.cookie.read().indexOf(key + '=' + status) === -1) { tarteaucitron.pro('!' + key + '=' + status); } d.setTime(expireTime); document.cookie = value + '; expires=' + d.toGMTString() + '; path=/;' + domain; }, "read": function () { "use strict"; var nameEQ = tarteaucitron.parameters.cookieName + "=", ca = document.cookie.split(';'), i, c; for (i = 0; i < ca.length; i += 1) { c = ca[i]; while (c.charAt(0) === ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length, c.length); } } return ''; }, "purge": function (arr) { "use strict"; var i; for (i = 0; i < arr.length; i += 1) { document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/;'; document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/; domain=.' + location.hostname + ';'; document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/; domain=.' + location.hostname.split('.').slice(-2).join('.') + ';'; } }, "checkCount": function (key) { "use strict"; var arr = tarteaucitron.services[key].cookies, nb = arr.length, nbCurrent = 0, html = '', i, status = document.cookie.indexOf(key + '=true'); if (status >= 0 && nb === 0) { html += tarteaucitron.lang.useNoCookie; } else if (status >= 0) { for (i = 0; i < nb; i += 1) { if (document.cookie.indexOf(arr[i] + '=') !== -1) { nbCurrent += 1; if (tarteaucitron.cookie.owner[arr[i]] === undefined) { tarteaucitron.cookie.owner[arr[i]] = []; } if (tarteaucitron.cookie.crossIndexOf(tarteaucitron.cookie.owner[arr[i]], tarteaucitron.services[key].name) === false) { tarteaucitron.cookie.owner[arr[i]].push(tarteaucitron.services[key].name); } } } if (nbCurrent > 0) { html += tarteaucitron.lang.useCookieCurrent + ' ' + nbCurrent + ' cookie'; if (nbCurrent > 1) { html += 's'; } html += '.'; } else { html += tarteaucitron.lang.useNoCookie; } } else if (nb === 0) { html = tarteaucitron.lang.noCookie; } else { html += tarteaucitron.lang.useCookie + ' ' + nb + ' cookie'; if (nb > 1) { html += 's'; } html += '.'; } if (document.getElementById('tacCL' + key) !== null) { document.getElementById('tacCL' + key).innerHTML = html; } }, "crossIndexOf": function (arr, match) { "use strict"; var i; for (i = 0; i < arr.length; i += 1) { if (arr[i] === match) { return true; } } return false; }, "number": function () { "use strict"; var cookies = document.cookie.split(';'), nb = (document.cookie !== '') ? cookies.length : 0, html = '', i, name, namea, nameb, c, d, s = (nb > 1) ? 's' : '', savedname, regex = /^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i, regexedDomain = (tarteaucitron.cdn.match(regex) !== null) ? tarteaucitron.cdn.match(regex)[1] : tarteaucitron.cdn, host = (tarteaucitron.domain !== undefined) ? tarteaucitron.domain : regexedDomain; cookies = cookies.sort(function (a, b) { namea = a.split('=', 1).toString().replace(/ /g, ''); nameb = b.split('=', 1).toString().replace(/ /g, ''); c = (tarteaucitron.cookie.owner[namea] !== undefined) ? tarteaucitron.cookie.owner[namea] : '0'; d = (tarteaucitron.cookie.owner[nameb] !== undefined) ? tarteaucitron.cookie.owner[nameb] : '0'; if (c + a > d + b) { return 1; } if (c + a < d + b) { return -1; } return 0; }); if (document.cookie !== '') { for (i = 0; i < nb; i += 1) { name = cookies[i].split('=', 1).toString().replace(/ /g, ''); if (tarteaucitron.cookie.owner[name] !== undefined && tarteaucitron.cookie.owner[name].join(' // ') !== savedname) { savedname = tarteaucitron.cookie.owner[name].join(' // '); html += '
    '; html += ' '; html += ' ' + tarteaucitron.cookie.owner[name].join(' // '); html += ' '; html += '